题意:……应该不用我说了,看起来就很容斥原理,中国剩余定理……

  方法:因为题目中的n最大是15,使用状态压缩可以将所有的组合都举出来,然后再拆开成数组,进行中国剩余定理的运算,中国剩余定理能够求出同时满足余膜条件的最小整数x,x在(1,M)之间由唯一值,M是各个除数的乘积,所有符合条件的解为ans = x+k*M,可以知道在[1,R]这个区间内,有(M+R-x)/ M个k符合条件,然后在运算中为了防止溢出,所以使用了带膜乘法,就是将乘数转化为二进制,通过位移运算符,在中间过程中不断的取膜(看代码很容易明白)

  注意:为了简化运算,把(7,0)这一组加进去,带膜乘法中,需要使用同余膜定理把乘数转化为整数,因为欧几里德算法有可能返回负数,不转化会陷入死循环,我之前忘了,结果……题目给的样例都已经死在了里面……

  感悟:真不愧是多校训练赛,一个题目融合了这么多知识点。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 20
#define LL long long
int n,cnt;
LL X,Y,p[N],a[N],Pt[N],At[N];
int Get_Zuhe(int k){
int ip;
cnt = ip = ;
while(k){
if(k&){
Pt[cnt] = p[ip];
At[cnt] = a[ip];
cnt++;
}
ip++;
k >>= ;
}
Pt[cnt] = ;
At[cnt] = ;
cnt++;
return (cnt%);
}
LL ex_gcd(LL a,LL b,LL &x,LL &y){
if(b==) {
x=; y=;
return a;
}
LL R = ex_gcd(b,a%b,y,x);
y -= x*(a/b);
return R;
}
LL Mul(LL x,LL y,LL M){
LL ans = ;
while(y){
//cout<<y<<endl;
if(y&) ans = (ans+x%M)%M;
x = (x + x) % M;
y >>= ;
}
return ans;
}
LL China(){
LL M = ,m,ret = ,x,y,L,R;
for(int i = ;i < cnt;i++) M *= Pt[i];
for(int i = ;i < cnt;i++){
m = M/Pt[i];
ex_gcd(m,Pt[i],x,y);
x = (x+M)%M;///不要忘记转化为正数
ret = (ret+Mul(Mul(m,x,M),At[i],M)%M) % M;
}
ret = (ret+M)%M;
// printf("M = %I64d\n",M);
// printf("ret = %I64d\n",ret);
R = (Y+M-ret)/M;
L = (X-+M-ret)/M;
return R - L;
}
LL Solve(){
int tmp = (<<n),judge;
LL all = Y/ - (X-)/;
LL sum = ,ch;
for(int i = ;i < tmp;i++){
judge = Get_Zuhe(i);
ch = China();
// printf("china[%d] = %I64d\n",i,ch);
if(judge) sum -= ch;
else sum += ch;
}
return (all - sum);
}
int main(){
// freopen("A.in.cpp","r",stdin);
int t,ca = ;
scanf("%d",&t);
while(t--){
scanf("%d %I64d %I64d",&n,&X,&Y);
for(int i = ;i < n;i++){
scanf("%I64d %I64d",&p[i],&a[i]);
}
printf("Case #%d: %I64d\n",++ca,Solve());
}
return ;
}

HDU 5768 Lucky7 (容斥原理 + 中国剩余定理 + 状态压缩 + 带膜乘法)的更多相关文章

  1. HDU 5768 Lucky7 容斥原理+中国剩余定理(互质)

    分析: 因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题.当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的 ...

  2. HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)

    Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...

  3. hdu 4057 AC自己主动机+状态压缩dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4057 Problem Description Dr. X is a biologist, who likes r ...

  4. 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai  的数 ...

  5. HDU 5768:Lucky7(中国剩余定理 + 容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Problem Description   When ?? was born, seven ...

  6. HDU 5768 Lucky7 (中国剩余定理+容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 给你n个同余方程组,然后给你l,r,问你l,r中有多少数%7=0且%ai != bi. 比较明显 ...

  7. hdu 5768 Lucky7 中国剩余定理+容斥+快速乘

    Lucky7 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem D ...

  8. hdu 5768 Lucky7 容斥

    Lucky7 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...

  9. Lucky 7 (容斥原理 + 中国剩余定理)

    题意:求满足7的倍数,不满足其他条件num % p == a 的num的个数. 思路:利用中国剩余定理我i们可以求出7的倍数,但是多算了不满足约定条件又得减去一个,但是又发现多减了,又得加回来.如此, ...

随机推荐

  1. spring 集成mongo配置

    spring继承Mongo使用的是spring-data. 如果需要加入两个mongo与spring集成的包,spring-data-commons-1.7.0.RELEASE.jar,spring- ...

  2. Erlang的Unicode支持

    在R13A中, Erlang加入了对Unicode的支持.本文涉及到的数据类型包括:list, binary, 涉及到的模块包括stdlib/unicode, stdlib/io, kernel/fi ...

  3. ural 1119. Metro(动态规划)

    1119. Metro Time limit: 0.5 second Memory limit: 64 MB Many of SKB Kontur programmers like to get to ...

  4. md5校验问题

    描述: 最近跟同事做数据对接,接收完数据,有个md5校验,发现总是对不上 首先把解密之后的明文直接写成变量在md5的工具类main函数执行,发现居然对上了, 然后测试环境debug接收的文件,md5加 ...

  5. mysql、sqlserver数据库常见数据类型对应java中的的类型探究

    由于本次测试表的结构不涉及到主键的自增长,所以mysql.sqlserver建表语句相同: CREATE TABLE testType ( id INT NOT NULL DEFAULT 0, gen ...

  6. SCU 1069 POJ 2955 Brackets

    区间DP #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  7. TCP/IP,http,socket,长连接,短连接——小结。

    来源:http://blog.chinaunix.net/uid-9622484-id-3392992.html TCP/IP是什么? TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. ...

  8. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;方法意思

    这个方法是用来设置你的TableView中每一行显示的内容和格式的. indexPath 用来指示当前单元格,它的row方法可以获得这个单元格的行号,section方法可以获得这个单元格所处的区域号 ...

  9. button的action属性如果有参数,必须加“:”

    比如: [bt addTarget:self action:@selector(shareButtonClickHandler:) …… 后面未写完 一开始我没加,就报错.

  10. Myeclipse8.6安装freemarker插件

    1. 打开http://sourceforge.net/projects/freemarker-ide/files/ 下载最新版本,目前本人下载时最新版本是:freemarker-ide-0.9.14 ...