Description

给定m个素数和Q个询问。每个询问有n个人,每次操作可以任意选择其中的一个素数p(素数可以重复使用),然后去掉剩余人数 mod p个人。对于每个询问,我们想知道,至少需要多少步操作才能去掉所有人。

Input

第一行:素数个数m和询问个数Q1 <= m <= 100 0001 <= Q <= 100 000)第二行:m个素数pi (2 <= pi <= 10 000 000)下面Q行:n (1 <= n <= 10 000 000

Output

Q行答案。如果无解,输出oo

设f[n]为n的答案,则f[0]=0,f[i]单调非降,f[n]=1+f[v],其中v为某个素数pi的整数倍且v<n<v+pi,当n>=所有给定素数之积则无解

从小到大枚举n,维护pi不超过n的最大倍数,记录t[x]表示值为x的合法倍数个数,以及对每个数x用链表维护当前哪些质数的合法倍数在这个位置

最坏情况下素数倍数更新次数大约在3e7

#include<cstdio>
#include<algorithm>
char buf[],*ptr=buf-;
int n,Q,x,f[],ps[],qs[],mq=;
int t[],p=;
int e0[],enx[];
long long lcm=;
int _(){
int x=,c=*++ptr;
while(c<)c=*++ptr;
while(c>)x=x*+c-,c=*++ptr;
return x;
}
void maxs(int&a,int b){if(a<b)a=b;}
int main(){
fread(buf,,,stdin);
n=_();Q=_();
for(int i=;i<=n;++i)ps[i]=_();
for(int i=;i<=n&&lcm<=;++i)lcm*=ps[i];
for(int i=;i<Q;++i)maxs(mq,qs[i]=_());
if(lcm-<mq)mq=lcm-;
for(int i=;i<=n;++i)e0[ps[i]]=i;
t[]=n;
for(int i=;i<=mq;++i){
for(int e=e0[i],nx,w;e;e=nx){
nx=enx[e];
--t[i-ps[e]];
++t[i];
int j=i+ps[e];
if(j<=mq)enx[e]=e0[j],e0[j]=e;
}
while(!t[p])++p;
f[i]=+f[p];
}
for(int i=;i<Q;++i){
if(qs[i]<lcm)printf("%d\n",f[qs[i]]);
else puts("oo");
}
return ;
}

最新文章

  1. php数据加密
  2. XMPP iOS客户端实现三:登录、注册
  3. shh(struts+spring+Hibernate)的搭建
  4. spring 缓存(spring自带Cache)(入门)源码解读
  5. nodejs,node原生服务器搭建实例
  6. 重新想象 Windows 8 Store Apps (51) - 输入: 涂鸦板
  7. 求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
  8. UISlider控件属性及方法(转)
  9. JDBC的几种驱动
  10. RMAN_Oracle RMAN的常用Configure配置
  11. uboot 的内存命令使用 mw (修改) md (显示)
  12. WebApi调试中遇到的一些问题
  13. bzoj3796
  14. PowerShell 批量导入/导出Active Directory
  15. Visual Studio属性配置中使用宏
  16. timeit模块 与 time模块,计时的区别
  17. MySQL架构由小变大的演变过程
  18. git gc -- 压缩历史信息
  19. Python3.7源码在windows(VS2015)下的编译和安装
  20. centos7-aliyun

热门文章

  1. Intent传输包含对象的List集合
  2. USB描述符概述
  3. 使用jetty-maven-plugin插件进行测试
  4. 关于Highcharts图表组件动态修改属性的方法(API)总结之Series
  5. iOS学习笔记---C语言第四天
  6. win7 一些快捷系统工具命令
  7. Ionic基础——侧边栏ion-side-menus 以及ion-tap结合侧边栏详解
  8. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
  9. C++ Primer:第七章:类
  10. 2016 Hunan Province Programming Contest