CRT+容斥定理——Luck7 ( HDU 5768 ) ( 2016 Multi-University Training Contest 4 1005 )
2016-07-29 13:32
399 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5768
分析:
给出区间 [x,y] 和 数字n,再给出n行,每行为ai 与 pi,求出区间内 7 的倍数且模ai余数不为pi的数的个数。我们可以用CRT求出所有模ai余pi的数。
题解:
利用CRT和二进制状态压缩计算不满足条件的数,然后用容斥定理计算答案
参考代码:
http://acm.hdu.edu.cn/showproblem.php?pid=5768
分析:
给出区间 [x,y] 和 数字n,再给出n行,每行为ai 与 pi,求出区间内 7 的倍数且模ai余数不为pi的数的个数。我们可以用CRT求出所有模ai余pi的数。
题解:
利用CRT和二进制状态压缩计算不满足条件的数,然后用容斥定理计算答案
参考代码:
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; const int maxn = 20; LL a[maxn], m[maxn]; LL N; LL multimod(LL x,LL y,LL m)//模乘法 { LL ans=0; while(y) { if(y&1) { ans+=x; ans%=m; } x+=x; x%=m; y>>=1; } ans=(ans+m)%m; return ans; } void Exgcd(LL a, LL b, LL &x ,LL &y) { if(!b) {x = 1;y = 0;return; } Exgcd(b, a % b, x, y); LL tmp = x; x = y; y = tmp - (a / b) * y; } LL CRT ( LL num) { LL totalsum=0; for(int i=0;i<(1<<N);i++) { LL M=7,ans=0,count=0,x=0,y; for(int j=0;j<N;j++) if(i&(1<<j))//解每种情况的方程 { M*=a[j]; count++; } for(int j=0;j<N;j++) if(i&(1<<j))//解每种情况的方程 { LL Mi=M/a[j]; Exgcd(Mi,a[j],x,y); ans=(ans+multimod(multimod(x,Mi,M), m[j],M))%M; } ans=(ans+M)%M; cout << ans << endl;//得到满足模ai余pi的数 LL res=num/M+(num%M>=ans); cout << count << " QAQ " << res << endl; if(count%2) totalsum-=res;//容斥原理的体现 else totalsum+=res; } return totalsum; } int main() { int T; scanf("%d", &T); int tt = 1; while(T--) { LL x,y; scanf("%lld%lld%lld", &N, &x, &y); for(int i=0;i<N;i++) { scanf("%lld%lld",&a[i],&m[i]); } printf("Case #%d: %lld\n", tt++, CRT(y)-CRT( x-1)); } return 0; }
相关文章推荐
- HDU 5768 Lucky7(2016 Multi-University Training Contest 4 -1005)——中国剩余定理 + 容斥原理
- 2016 Multi-University Training Contest 1-1005---HDU 5727 Necklace(枚举+二分图匹配)
- 2016 Multi-University Training Contest 2 1005 hdu 5738 计算几何
- 计算几何(组合计数+向量排序)——Eureka ( HDU 5738 ) ( 2016 Multi-University Training Contest 2 1005 )
- 贪心——HDU 5813 ( 2016 Multi-University Training Contest 7 1005 )
- 2016 Multi-University Training Contest 2-1005---HDU 5738 Eureka
- 2016 Multi-University Training Contest 2 1001 hdu 5734 暴力
- HDU 5274 Chess(SG博弈)---2016 Multi-University Training Contest 1
- 2016 Multi-University Training Contest 2 HDU 5744 Keep On Movin
- hdu 5734 Acperience 2016 Multi-University Training Contest 2
- 2016 Multi-University Training Contest 1 1011 hdu 5733 四面体内切球
- 2016 Multi-University Training Contest 1 1001 hdu 5723 DFS+并查集最小生树
- 2016 Multi-University Training Contest 1 1011(HDU 5733 计算几何)
- HDU 5723 Abandoned country(2016 Multi-University Training Contest 1的1001题)
- HDU 5729 Rigid Frameworks (from: 2016 Multi-University Training Contest)
- hdu 5723 Abandoned country(2016 Multi-University Training Contest 1——最小生成树+深搜)
- (HDU 5733)2016 Multi-University Training Contest 1 tetrahedron(几何)
- 2016 Multi-University Training Contest 2 hdu 5734 Acperience【推公式,数学】
- 2016 Multi-University Training Contest 1-1011---HDU 5733 tetrahedron(计算几何)
- HDU 5738 Eureka (from: 2016 Multi-University Training Contest 2)