Lucky 7 (容斥原理 + 中国剩余定理)
题意:求满足7的倍数,不满足其他条件num % p == a 的num的个数。
思路:利用中国剩余定理我i们可以求出7的倍数,但是多算了不满足约定条件又得减去一个,但是又发现多减了,又得加回来。如此,那么应该应用容斥原理来解决问题。那么就应该是将所有的状态都遍历一下,然后根据1的个数来判断是不是+-号。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxn = ;
ll n, l, r;
ll m[maxn], a[maxn], f[maxn]; ll ex_gcd(ll a, ll b, ll &x, ll &y) {
if(!b) {
x = ;
y = ;
return a;
} else {
ll tmp = ex_gcd(b, a%b, y, x);
y -= a / b * x;
return tmp;
}
} inline ll cnt(ll k, ll m, ll x) {
return (m - k + x) / m;
} ll mul(ll a, ll b, ll m) {
ll ans = ;
while(b) {
if(b&1LL) {
ans += a;
ans %= m;
}
a <<= ;
a %= m;
b >>= ;
}
return ans;
}
ll crt(int n, ll l, ll r) {
ll M = ;
for(int i = ; i < n; i++)
if(f[i])
M *= m[i]; ll ans = ;
for(int i = ; i < n; i++)
if(f[i]) {
ll mi = M / m[i];
ll mf, tmp;
ex_gcd(mi, m[i], mf, tmp);
mf = (mf % m[i] + m[i]) % m[i]; ans += mul(mul(a[i], mi, M), mf, M);
ans = (ans % M + M) % M;
}
return cnt(ans, M, r) - cnt(ans, M, l-);
} int main() {
int T;
scanf("%d", &T);
for(int ncase = ; ncase <= T; ncase ++) {
scanf("%lld%lld%lld", &n, &l, &r);
for(int i = ; i < n; i ++) {
scanf("%lld%lld", &m[i], &a[i]);
}
ll ans = ;
m[n] =; a[n] = ; f[n] = ;
for(int i = ; i < ( << n); i ++){
int tmp = i, cn = ;
for(int j = ; j < n; j ++){
if(tmp & ) {
f[j] = ; cn ++;
}else{
f[j] = ;
}
tmp >>= ;
}
if(cn & ) ans -= crt(n + , l, r);
else ans += crt(n + , l, r);
}
printf("Case #%d: %lld\n",ncase,ans);
}
return ;
}
Lucky 7 (容斥原理 + 中国剩余定理)的更多相关文章
- HDU 5768 Lucky7 (容斥原理 + 中国剩余定理 + 状态压缩 + 带膜乘法)
题意:……应该不用我说了,看起来就很容斥原理,很中国剩余定理…… 方法:因为题目中的n最大是15,使用状态压缩可以将所有的组合都举出来,然后再拆开成数组,进行中国剩余定理的运算,中国剩余定理能够求出同 ...
- HDU 5768 Lucky7 容斥原理+中国剩余定理(互质)
分析: 因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题.当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的 ...
- ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
二进制枚举+容斥原理+中国剩余定理 #include<iostream> #include<cstring> #include<cstdio> #include&l ...
- 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai 的数 ...
- HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...
- [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】
题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ...
- hdu 5768 Lucky7 中国剩余定理+容斥+快速乘
Lucky7 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- 中国剩余定理(Chinese Remainder Theorem)
我理解的中国剩余定理的含义是:给定一个数除以一系列互素的数${p_1}, \cdots ,{p_n}$的余数,那么这个数除以这组素数之积($N = {p_1} \times \cdots \tim ...
- 51nod1079(中国剩余定理)
题目链接: http://www.51nod.com/onlineJudge/user.html#!userId=21687 题意: 中文题诶~ 思路: 本题就是个中国剩余定理模板题,不过模拟也可以过 ...
随机推荐
- 在生成一个窗体的时候,点击窗体的右上角关闭按钮激发窗体事件的方法:窗体Frame为事件源,WindowsListener接口调用Windowsclosing()。
事件模式的实现步骤: 开发事件对象(事件发送者)——接口——接口实现类——设置监听对象 一定要理解透彻Gril.java程序. 重点:学会处理对一个事件源有多个事件的监听器(在发送消息时监听器收到 ...
- Kubernetes集群部署之五node节点部署
Node节点是Kubernetes集群中的工作负载节点.每个node都会被master分配一些工作负载,每个node节点都运行以下关键服务进程.Kubelet :负责pod对应的容器的创建.启停等任务 ...
- R options scipen 控制科学计数法的显示
当数字过长,R语言会自动采用科学计数法显示,测试如下 > a <- > a [] > a <- > a <- > a [] > a <- & ...
- Ubuntu下安装open-falcon-v0.2.1
在Ubuntu下安装open-falcon和Centos下安装的方法有点区别,因为Ubuntu使用的包管理器是apt-get,而Centos下使用的是Yum,建议不要再Ubuntu下使用yum 建议自 ...
- Android用户点击返回按钮两次退出整个APP
最近的APP项目有一个需求就是连续点击两次返回按钮,退出整个APP,而不是返回到上一个页面,这个连续是有时间限制的,在我的项目里,我设置成2秒钟,如果两秒之内点击了两次,就代表用户想要退出整个APP, ...
- 【转载】浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
原文地址 http://blog.csdn.net/briblue/article/details/75093382 写这篇文章的原因是这两天在编写关于 Dagger2 主题的博文时,花了大量的精力来 ...
- Ubuntu下pdf和图片互转
前边文章可以将ppt转换为pdf 查看 使用unoconv将ppt转为pdf,再使用imagemagick将pdf转为图片 这次想将pdf和图片进行互转 当前目录下只有2.ppt 1.ppt转pdf ...
- Python的循环导入问题
循环导入的最好的解决方法是从架构上优化,即调整模块和模块成员变量的设计.一个好的原则是:可导出的成员变量,都不应该依赖于导入进来的成员变量. 但是在业务开发的过程中,总会遇到通过架构层面解决不了的导入 ...
- macOS 10.13 High Sierra odoo11 开发配置--完整版
1.抹盘安装macOS Sierra 10.13: 制作macOS安装启动盘参见:http://www.iplaysoft.com/macos-usb-install-drive.html 2.安装g ...
- ubuntu16.04 在/etc/network/interfaces设置static ip无效
双网卡使用无线网卡上互联网,使用以太网卡连局域网,在/etc/network/interfaces里对以太网卡设置static ip无效,使用ifconfig临时设置也仅能工作一会,设置的ip马上就消 ...