ZOJ 3233 Lucky Number(数论,容斥原理)
来源:互联网 发布:macbookpro卸载软件 编辑:程序博客网 时间:2024/05/17 05:56
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
题目:给出两组数,要求在区间内找出有多少个数,满足至少能被第一组中的一个数整除,而且至少能不被第二组中的一个数整除。
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3490
开始题目看错了,以为是不能被第二组中的任何一个数整除,这样应该更难处理了。
我们定义第一个条件为P1,第二个条件为P2。
则要求的是P1&&P2。由于P2条件比较奇怪,至少不能被一个数整除,所以我们考虑其反命题,能被第二组中的所有数整除,则是能被最小公倍数整除。
那么P1&&P2=P1-P1&&(~P2),这样便可以解决了。
我调用的容斥次数太多,太耗时了,可以在一次调用中全部解决。请读者自行思考
另外就是注意溢出神马的。
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<vector>#include<string>#include<algorithm>#include<queue>#define LL long long#define eps 1e-7using namespace std;vector<LL>b;int cbln,cbun;LL l,r,k;LL ret,bun;LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b);}void dfs(int k,int remain,int idx,int cnt,LL num,LL n){ if(remain==0){ if(k&1) ret+=n/num; else ret-=n/num; return ; } if(idx>=cnt) return ; dfs(k,remain,idx+1,cnt,num,n); LL tmp=num/gcd(num,b[idx])*b[idx]; if(tmp<=n&&tmp>0) dfs(k,remain-1,idx+1,cnt,tmp,n);}LL slove(LL up,int cnt,LL init){ if(up<=1) return 0; ret=0; for(int i=1;i<=cnt;i++) dfs(i,i,0,cnt,init,up); return ret;}int main(){ while(scanf("%d%d%lld%lld",&cbln,&cbun,&l,&r)!=EOF){ if(cbln+cbun+l+r==0) break; b.clear(); for(int i=0;i<cbln;i++){ scanf("%lld",&k); b.push_back((LL)k); } bun=1; bool flag=false; LL a=slove(r,cbln,1LL)-slove(l-1,cbln,1LL); for(int i=0;i<cbun;i++){ scanf("%lld",&k); if(i==0) bun=k; else{ bun=bun/gcd(bun,k)*k; if(bun<0) flag=true; } } if(flag){ printf("%lld\n",a); continue; } LL b=slove(r,cbln,bun)-slove(l-1,cbln,bun); printf("%lld\n",a-b); } return 0;}
- ZOJ 3233 Lucky Number(数论,容斥原理)
- 【ZOJ】3233【容斥原理】【Lucky Number】
- zoj 3233 Lucky Number(容斥原理)
- ZOJ 3233 Lucky Number(容斥原理)
- ZOJ 3233 Lucky Number 容斥
- ZJU 3233 - Lucky Number (容斥原理)
- [容斥原理] zoj 2836 Number Puzzle
- ZOJ 2836 Number Puzzle(容斥原理)
- ZOJ 2836Number Puzzle(容斥原理)
- HDU 4390 Number Sequence 数论-(容斥原理)
- 容斥原理 数论
- hdu4937 Lucky Number,数论
- zoj 2836 Number Puzzle(容斥原理)
- ZOJ 2836 Number Puzzle(容斥原理啊)
- ZOJ 2836 Number Puzzle (容斥原理)
- zoj 2836 Number Puzzle(容斥原理)
- Lucky Number ZOJ
- [HDU 5213]Lucky:莫队+容斥原理
- 同步代码块和同步函数之间同步
- 细谈Hibernate之悲观锁和乐观锁解决hibernate并发
- 全面解读WM_NOTIFY
- Android中的单位长度详解
- 【C++】类的成员初始化表与构造函数内赋值操作
- ZOJ 3233 Lucky Number(数论,容斥原理)
- 淘宝2012秋季校园招聘技术试卷(A)
- 工作悟行
- aal';\'l
- Apk decode
- java 中的内部类
- 华为能否顺利踏入上游手机芯片领域?
- 《Effective C++》读书笔记之item29:为“异常安全”而努力是值得的
- 计算机视觉文献与代码资源