HDU-5768 Lucky7
题目描述
给定\(n\)对数,\(p_i和a_i\)。
求区间\([L,R]\)间为\(7\)的倍数,同时满足对于所有的\(p_i\)取模后不为\(a_i\)的数的个数。
Input
第一行为整数 \(T(T≤20)\) 代表数据组数
每组数据的第一行为\(3\)个整数 \(n, l, r(0<=n<=15,0<l<r<1e18)\)。
之后\(n\)行每行有两个数\(p_i\)和 \(a_i\)。
输入保证所有\(p_i\)互不相同且 \(p_i!=7\)。
输入保证\(p_1*p_2*…*p_n<=1e18\) 并且\(0<a_i<p_i<=1e5\)对所有$ i∈(1…n)$.成立
Output
对每个数据输出一行,先输出"Case #x: ",x=1,2,3…., 之后输出答案。
Sample Input
2
2 1 100
3 2
5 3
0 1 100
Sample Output
Case #1: 7
Case #2: 14
对于一组\([L,R]\)可以转化为\([1,R]-[1,L-1]\)。
那么我们就要求\([1,x]\)间满足条件的数的个数。
我们发现最多只有\(15\)个限制条件,也就是说最多只有\(2^{15}\)种限制情况。
我们考虑满足条件的数的个数为所有数-不满足条件的数的个数。
所有数我们十分好求,直接就是\(x/7\)即可。
那么我们需要求出不满足条件的数的个数。
我们考虑容斥求解,对于所有的限制条件我们会计算重复。
那么我们对于其中的一部分条件进行计算,最后进行容斥统计即可。
对于当前的限制条件,我们要求出满足所有限制条件的数的个数。
所以我们可以把所有的限制条件转化为一个大的限制条件。
\[
\begin{cases}
Ans=res_1\%p_1 \\
Ans=res_2\%p_2 \\
Ans=res_3\%p_3 \\
Ans=res_4\%p_4
\end{cases}
\]
我们直接利用中国剩余定理求解即可。
最后我们得到了一个方程的解集\(Ans+k*M\).
那么区间\([1,L]\)内的不满足条件的数的个数为\(1+(L-Ans)/M\)。
在原来的\(tot\)上减去即可。
一个需要注意的是,若\(Ans>L\),则说明该区间内无解,需要直接\(continue\)掉
#include <cstdio>
#include <iostream>
using namespace std;
#define int long long
#define reg register
#define clr(a,b) memset(a,b,sizeof a)
#define Mod(x) (x>=mod)&&(x-=mod)
#define abs(a) ((a)<0?-(a):(a))
#define debug(x) cerr<<#x<<"="<<x<<endl;
#define debug2(x,y) cerr<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl;
#define debug3(x,y,z) cerr<<#x<<"="<<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl;
#define rep(a,b,c) for(reg int a=(b),a##_end_=(c); a<=a##_end_; ++a)
#define ret(a,b,c) for(reg int a=(b),a##_end_=(c); a<a##_end_; ++a)
#define drep(a,b,c) for(reg int a=(b),a##_end_=(c); a>=a##_end_; --a)
#define erep(i,G,x) for(int i=(G).Head[x]; i; i=(G).Nxt[i])
#pragma GCC optimize(2)
inline int Read(void) {
int res=0,f=1;
char c;
while(c=getchar(),c<48||c>57)if(c=='-')f=0;
do res=(res<<3)+(res<<1)+(c^48);
while(c=getchar(),c>=48&&c<=57);
return f?res:-res;
}
template<class T>inline bool Min(T &a, T const&b) {
return a>b?a=b,1:0;
}
template<class T>inline bool Max(T &a, T const&b) {
return a<b?a=b,1:0;
}
const int N=525,M=1e5+5;
bool MOP1;
int n,m,k,A[N],P[N],res[N],mod[N],a[N],pos[N];
int Exgcd(int a, int b, int &x, int &y) {
if(!b) {
x=1,y=0;
return a;
}
int g=Exgcd(b,a%b,y,x);
y-=a/b*x;
return g;
}
int Mod,tot;
inline int Excrt(void) {
int M=mod[1],ans=res[1],x,y;
rep(i,2,tot) {
int g=Exgcd(M,mod[i],x,y);
x*=(res[i]-ans)/g,y=mod[i]/g,x=(x%y+y)%y;
ans=M*x+ans,M=M/g*mod[i],ans%=M;
}
int z=(ans%M+M)%M;
Mod=M;
return z;
}
int solve(int x) {
if(!x)return 0;
int Res=x/7;
ret(i,1,1<<n) {
tot=0;
rep(j,1,n)if(i&(1<<j-1))mod[++tot]=P[j],res[tot]=A[j];
mod[++tot]=7,res[tot]=0;
int Now=Excrt();
if(Now>x)continue;
if(tot%2)Res+=(x-Now)/Mod+1;
else Res-=(x-Now)/Mod+1;
}
return Res;
}
int vis[N];
bool MOP2;
inline void _main(void) {
int T=Read(),Case=0;
while(T--) {
n=Read();
int l=Read(),r=Read();
rep(i,1,n)P[i]=Read(),A[i]=Read();
printf("Case #%lld: %lld\n",++Case,solve(r)-solve(l-1));
}
}
signed main() {
_main();
return 0;
}
原文地址:https://www.cnblogs.com/dsjkafdsaf/p/11573269.html
- ASP.NET MVC扩展库
- centos7.2部署vnc服务记录
- nginx访问报错:Too many open files accept:
- iptables之NAT端口转发设置
- 使用Combres 库 ASP.NET 网站优化
- jQuery和asp.net mvc相关资源链接
- JavaScriptSerializer 序列化json 时间格式
- Nginx反向代理+负载均衡简单实现(https方式)
- 在网页中给Flash加上超级链接
- ASP.NET MVC HandleErrorAttribute 和 远程链接
- javascript实现数字转大写金额的函数
- 如何在GridView的Footer内显示总计?
- 自定义WCF的配置文件
- Centos中动态扩容lvm逻辑卷的操作记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用frp搭建内网穿透
- CNS图表复现03—单细胞区分免疫细胞和肿瘤细胞
- C#记事本项目开发,一个可以实现批量操作的记事本!【附源码】
- Python 库引用问题:name 'json' is not defined,原因及解决办法
- Java集合类之Collection接口,集合的“爸爸”接口了解一下?
- Python 微信机器人-下载微信接收到的语音、图片等资源
- Python源文件打包成可执行的exe应用,给你的代码变个身!
- Python 技术篇-ffmpeg.exe的安装及配置
- Python 库配置问题-"Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work",原因及解决办法
- 小白都能看懂的简单爬虫入门案例剖析(爬虫入门看它就够了!)
- Python 技术篇-音频mp3格式转wav格式,高保真
- Python3 模块
- Python 微信机器人-向好友发送名片、转发名片
- iOS多线程:GCD使用介绍
- 适用于各语言的二分查找算法,你get到了嘛?