bzoj3136
Description
给定m
个素数和Q
个询问。每个询问有n
个人,每次操作可以任意选择其中的一个素数p
(素数可以重复使用),然后去掉剩余人数 mod p
个人。对于每个询问,我们想知道,至少需要多少步操作才能去掉所有人。
Input
第一行:素数个数m
和询问个数Q
(1 <= m <= 100 000
, 1 <= 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 ;
}
bzoj3136的更多相关文章
- bzoj3136: [Baltic2013]brunhilda
这个题为什么会放在数据结构啊 首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p 设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的 假如fd能转移到fk,首先d一 ...
随机推荐
- DISCOVAR de novo
海宝建议用这个拼接软件 http://www.broadinstitute.org/software/discovar/blog/?page_id=98 DISCOVAR – variant call ...
- ZOJ 1049 I Think I Need a Houseboat
原题链接 题目大意:Fred想在Louisiana买一套房子,但是堤坝不牢固,每年都要被河水侵蚀50平方英里.题目给出他豪宅的坐标,要求他被迫移民搬迁的年份. 解法:也没什么好说的,先求出两点间的距离 ...
- Spring Data Jpa 详解
前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...
- new总结
基础:c++中,什么时候用 A a;和什么时候用A a=new A; new是在堆上分配内存,它需要用delete释放,否则会造成内存泄漏(使用的内存没有即时释放,造成内存的浪费) int main( ...
- Oozie的安装过程
依赖CDH5,JDK和关系数据库 集群规划 主机名 IP Ooize节点 CHD1 XX.XX.XX.XX oozie server,oozie ...
- Improve Scalability With New Thread Pool APIs
Pooled Threads Improve Scalability With New Thread Pool APIs Robert Saccone Portions of this article ...
- IntelliJ IDEA currently
https://www.jetbrains.com/help/idea/2016.2/creating-a-project-from-scratch.html https://www.jetbrain ...
- android向web提交参数的4种方式总结,附带网站案例源码
第一种:基于http协议通过get方式提交参数 1.对多个参数的封装 public static String get_save(String name, String phone) { /** * ...
- Unity3D研究院编辑器之脚本设置ToolBar
Unity版本5.3.2 如下图所示,ToolBar就是Unity顶部的那一横条.这里的所有按钮一般情况下都得我们手动的用鼠标去点击.这篇文章我们说说如果自动操作它们 1.自动点击左边四个按钮 (拖动 ...
- OAuth2.0详解
1.使用场景 A系统存放着订单信息 B系统需要查询A系统中的订单信息,但是必须要A系统验证通过后,才能查询. 此时,我们有两种验证方式: 1)拥有A系统的账户/密码 弊端是对A系统来说,直接提供账户/ ...