Description

除去对铁质盔甲强烈的热爱,Brunhilda是一个正常的7岁女孩。近期,她正在策划一个完美的生日派对。她发明了如下的一个游戏:所有的孩子在一个数k被宣读之前不停地跑来跑去。当这个数字k宣读后,所有的孩子将形成人数恰好为k的若干群体,且保证剩余的孩子数目小于k。最后,这不足k个的孩子将从游戏中被淘汰。紧接着,比赛将继续进行,并公布一个新的数字k。游戏将在所有的孩子都被淘汰后结束。

Brunhilda请她的父亲Wotan在游戏中来宣读数字。Wotan不喜欢这个游戏,当然也不希望在游戏的第一轮就宣布一个正无穷(PS:宣布正无穷等于将所有的孩子都从游戏中淘汰)。 Brunhilda认为这在派对上是相当尴尬的情形,所以她给了她父亲一串共计m个素数的列表。这样,她的父亲便可以从中进行选择。当然,相同的数字在游戏中可以被多次宣读。

Wotan想尽快结束比赛,因为他有一张他最喜欢的足球俱乐部 FC Asgard的比赛门票。不幸的是,Brunhilda不知道派对上参加游戏的孩子数目。现在,对于Q个不同的数n1,...,nQ个儿童,Wotan要预先知道他所需宣读的最少数字,以便他尽早结束游戏。

Input

第一行包含整数m和Q。

第二行包含m个不同的递增素数pi(1≤i≤M),表示Wotan可以宣读的数字。

接下来Q行分别包含一个整数nj(1≤j≤Q),表示可能参加游戏的孩子数目nj。

Output

输出包括Q行。第j行表示对于询问nj所得到的答案,即如果Wotan能结束游戏,请输出他最少所需要宣读的数字个数,否则输出字符串oo(两个小写字母o表示∞)。

Sample Input

2 22 356

Sample Output

3oo

Data Constraint

20%的数据:m,nj,Q<=10000.

另有20%的数据:Q=1

100%的数据:1<=m,Q<=100 000,1<=nj<=10 000 000,2<=pi<=10 000 000

Solution

dp。设f[i]表示人数为i时最小宣读数字个数,转移只需要枚举j,f[ i ]=min(f[ i ],f[ i - i%p[ j ]+1 ])。但是这样时超。

考虑优化。

显然当i>p[1]*p[2]*...*p[m]时,f[i]=oo

然而没什么用。

我们可以发现f数组是单调不下降的,并且考虑一个 i,它可以由 i - i%p 转移过来,反过来,设k= i-i%p,则有k为p的倍数,k可以转移到k+i%p,因为i%p取0~p-1,所以k实际上可以转移到k+1~k+p-1。所以答案应该是连续的一段1,然后是连续一段2,以此类推。因此,我们需要在做答案是1的那一段时将答案为2的那一段的右端点求出来,然后一段一段做就可以了。若要求下一段的右端点,我们可以预处理出p数组,p[i]表示i的最大的在给定的素数中出现过的素因子。那么下一段的右端点即为max{i+p[i]-1}。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define F(i,a,b) for(int i=a;i<=b;i++)
#define N 10000000
using namespace std;
int f[N+10],p[N+10],n,m,x,l,r,t,tot=0;
int main(){scanf("%d%d",&n,&m);F(i,1,n){scanf("%d",&x);r=x-1;for(int j=x;j<=N;j+=x) p[j]=x;}l=1;while(l<=r&&r<=N){tot++;F(i,l,r){f[i]=tot;t=max(t,i+p[i]-1);}t=min(t,N);l=r+1;r=t;}while(m--){scanf("%d",&x);if(!f[x]) printf("oo\n");else printf("%d\n",f[x]);}return 0;
}


作者:zsjzliziyang 
QQ:1634151125 
转载及修改请注明 
本文地址:https://blog.csdn.net/zsjzliziyang/article/details/95102501

3318. 【BOI2013】Brunhilda的生日相关推荐

  1. 3318. 【BOI2013】Brunhilda的生日 (Standard IO)

    Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits Description 除去对铁质盔甲强烈的热爱,Brunhilda是一 ...

  2. jzoj3318-[BOI2013]Brunhilda的生日【数论】

    正题 题目大意 序列aaa有mmm个质数.然后询问一个数nnn,每次可以使n=n−n%ain=n-n\%a_{i}n=n−n%ai​ 求最少操作次数. 解题思路 首先我们设fif_ifi​表示由iii ...

  3. 欢乐纪中某A组赛【2019.7.8】

    前言 你以为我是jzojjzojjzoj,其实我是GMojGMojGMoj哒 成绩 JJJ表示初中,HHH表示高中后面加的是几年级 上至222分XJQXJQXJQ,下至200ZZY200ZZY200Z ...

  4. 【2019暑假集训】07.08比赛总结

    又双㕛叕自闭了... 比赛思路 一上来看到T1感觉是什么奇奇怪怪的数论题目,又看了看T2发现是一道水题,再看看T3感觉可以搞一搞DP. T1思考了一会儿只会一个NM的DP(暴力),转战T2,不久就把T ...

  5. python生日提醒_python, 实现朋友家人年历生日自动提醒

    为了方便提醒自己,今天有哪位朋友过生日(年历生日). 测试环境:fedora25桌面版. 建立一个生日配置文件,注意:按日期排好序 vi /etc/birthday.txt 朋友A 1-4 朋友C 2 ...

  6. HDU1201 18岁生日【日期计算】

    18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. linux生日_代码简介:让我们用25个Linux事实来庆祝Linux的25岁生日。

    linux生日 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的故事: ...

  8. PyTorch迎来5岁生日,创始人带领大一实习生开发:没想到会这么成功

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨量子位 编辑丨极市平台 导读 PyTorch公开发布5周年! ...

  9. python制作生日祝福_【中信项目案例分享】python 实现自动生成个性化生日贺卡...

    python 处理图片 1. 图片上添加文字 1.1 代码部分 代码原理: 创建与原图同等大小的一张图片, 设置透明度为 0, 将两张同大小的图片重叠 from PIL import Image,Im ...

最新文章

  1. BOS项目 第2天(BaseDao、BaseAction、用户登录、自定义strust登录拦截器)
  2. 独立云计算服务商的多维实践之道:用户需求驱动变革
  3. Hadoop学习13--zookeeper相关
  4. Laravel 中查询 where 记录
  5. Matlab 图像处理相关函数命令
  6. Android编译环境(1) - 编译Native C的模块
  7. python--split方法
  8. 记录一次Tomcat内存泄露原因的追溯
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_1_File类的概述
  10. VS添加lib库文件步骤
  11. 绝对式编码器的ssi协议 stm32 hal
  12. 《python黑帽子 黑客与渗透测试编程之道》第二章-网络基础 tcp、udp客户端、服务端
  13. Idea中使用maven命令
  14. 从fototool谈景深与超焦距
  15. JAVA NIO介绍及使用
  16. vite.config 配置文件
  17. opencv 求矩阵的逆
  18. Congfu Xu's HomePage
  19. 基于EMC的共模干扰与差模干扰以及抑制方法
  20. sublimeText3编辑器使用大全

热门文章

  1. 计算机毕业设计android的家庭理财app系统(源码+系统+mysql数据库+Lw文档)
  2. Fruity Loops Studio2022最新版水果音乐编曲软件
  3. 整理了几个100%会踩的Python细节坑,提前防止脑血栓
  4. jQuery实现品优购放大镜案例
  5. 大学生学习网站哪里找?收好这15个网站
  6. arcgis for js实现三维地图架构
  7. 【AI折腾录】stable web ui基础【sd安装、lora vae embedding hyperwork等基础概念】
  8. 安卓开发使用mupdf实现pdf文件的预览
  9. 歧视来源于偏见,偏见来源于无知。改变不了环境就只能搞钱
  10. 疫情之后,企业经营模式将发生重大变化