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

  方法:因为题目中的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. vultr机房vps价格20%优惠,赶紧来抢!

    vps服务商vultr全线优惠促销!价格降幅是20%,强烈推荐站长们留意. vps猫腻很多,我写过大量文章介绍vps的优点和几大厂商情况.友情提醒,千万不要采购国内所谓vps云主机,你的数据很不安全哟 ...

  2. javascript动画效果之透明度(修改版)

    在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one ...

  3. 10个男孩和n个女孩共买了n2+8n+2本书,已知他们每人买的书本的数量是相同的,且女孩人数多于南海人数,问女孩人数是多少?(整除原理1.1.3)

    10个男孩和n个女孩共买了n2+8n+2本书,已知他们每人买的书本的数量是相同的,且女孩人数多于南海人数,问女孩人数是多少? 解: 因为,每个人买的书本的数量是相同的, 所以,10|n2+8n+2 所 ...

  4. .net dynamic动态加属性

    class Test : System.Dynamic.DynamicObject { public override bool TryGetMember(System.Dynamic.GetMemb ...

  5. python基础(三)--列表、元组、字典

    一.列表: 有序序列,支持索引.切片.循环(for,while) 元素可以被修改: 元素可以是任何数据类型(数字,字符串,列表,布尔值...),可以嵌套: ##增 1.append(object)   ...

  6. 在64位Win7操作系统中安装Microsoft Access Engine的解决方案

    在64位Win7操作系统中安装Microsoft Access Engine的解决方案 现在的Win7系统中安装的一般都是32位的Office,因为微软推荐使用32位的Office,兼容性更强,稳定性 ...

  7. Controller <-> View 一般视图层级

    关于 self.navigationController.view 相信看过 MBProgressHUD 官方例子 HudDemo 代码的同学应该看到过下述代码: 1 HUD = [[MBProgre ...

  8. HDU 2722 Here We Go(relians) Again (spfa)

    Here We Go(relians) Again Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/ ...

  9. C# 获取字符的Unicode编码

    using UnityEngine;using System.Collections;using System.Collections.Generic; List<); string chars ...

  10. 一个基于DpperHelper的t4模板

    自定义模板,空的类(目的是和t4生成的模板分开,以免被覆盖) ExtensionDAL <#@ template debug="false" hostspecific=&qu ...