Lucky7(hdu5768)
Lucky7
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 328 Accepted Submission(s): 130
?? once wrote an autobiography, which mentioned something about himself. In his book, it said seven is his favorite number and he thinks that a number can be divisible by seven can bring him good luck. On the other hand, ?? abhors some other prime numbers and thinks a number x divided by pi which is one of these prime numbers with a given remainder ai will bring him bad luck. In this case, many of his lucky numbers are sullied because they can be divisible by 7 and also has a remainder of ai when it is divided by the prime number pi.
Now give you a pair of x and y, and N pairs of ai and pi, please find out how many numbers between x and y can bring ?? good luck.
Each test case starts with three integers three intergers n, x, y(0<=n<=15,0<x<y<1018) on a line where n is the number of pirmes.
Following on n lines each contains two integers pi, ai where pi is the pirme and ?? abhors the numbers have a remainder of ai when they are divided by pi.
It is guranteed that all the pi are distinct and pi!=7.
It is also guaranteed that p1*p2*…*pn<=1018 and 0<ai<pi<=105for every i∈(1…n).
2 1 100
3 2
5 3
0 1 100
Case #2: 14
For Case 1: 7,21,42,49,70,84,91 are the seven numbers.
For Case2: 7,14,21,28,35,42,49,56,63,70,77,84,91,98 are the fourteen numbers.
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stdlib.h>
7 #include<iostream>
8 #include<vector>
9 #include<map>
10 #include<set>
11 #include<math.h>
12 using namespace std;
13 typedef long long LL;
14 typedef struct pp
15 {
16 LL x;
17 LL y;
18 } ss;
19 ss ans[20];
20 LL quick(LL n,LL m,LL mod);
21 LL mul(LL n, LL m,LL p);
22 pair<LL,LL>P(LL n,LL m);
23 LL gcd(LL n, LL m);
24 LL mm[20];
25 int main(void)
26 {
27 int i,j,k;
28 scanf("%d",&k);
29 int __ca=0;
30 LL n,x,y;
31 while(k--)
32 {
33 __ca++;
34 scanf("%lld %lld %lld",&n,&x,&y);
35 LL sum;
36 sum=y/7-(x-1)/7;
37 printf("Case #%d: ",__ca);
38 if(n==0)
39 {
40 printf("%lld\n",sum);
41 }
42 else
43 {
44 LL mod=1;
45 for(i=0; i<n; i++)
46 {
47 scanf("%lld %lld",&ans[i].x,&ans[i].y);
48 }
49 LL anw=0;
50 int s;
51 for(j=1; j<(1<<n); j++)
52 {
53 int cr=0;
54 for(s=0; s<n; s++)
55 {
56 if(j&(1<<s))
57 {
58 mm[cr++]=s;
59 }
60 }
61 LL mod=1;
62 LL acm=0;
63 for(i=0; i<cr; i++)
64 {
65 mod*=ans[mm[i]].x;
66 }
67 for(i=0; i<cr; i++)
68 {
69 LL mod1=mod/ans[mm[i]].x;
70 LL ni=quick(mod1,ans[mm[i]].x-2,ans[mm[i]].x);
71 acm=(acm+mul(mul(mod1,ni,mod),ans[mm[i]].y,mod))%mod;
72 }
73 anw=acm;
74 LL ctx=0;
75 if(anw>y)
76 {
77 continue;
78 }
79 else
80 {
81 LL cha=x-anw;
82 LL nx,ny;
83 LL cha1=y-anw;
84 nx=cha/mod;
85 while(anw+mod*nx<x)
86 {
87 nx++;
88 } if(cha<0)nx=0;
89 ny=cha1/mod;
90 {
91 pair<LL ,LL>AK=P(mod,7);
92 LL nxx=(AK.first*acm%7+7)%7;
93 nxx=((-nxx)%7+7)%7;
94 if(ny>=nxx)
95 {
96 LL cx=max(nx-nxx,(LL)0);
97 LL cy=ny-nxx;
98 if(cx==0)ctx=cy/7+1;else {ctx=cy/7-(cx-1)/7;}
99 }
100 }
101 }
102 if(cr%2)
103 {
104 sum-=ctx;
105 }
106 else sum+=ctx;
107 } printf("%lld\n",sum);
108 }
109 }
110 return 0;
111 }
112 LL gcd(LL n, LL m)
113 {
114 if(m==0)
115 {
116 return n;
117 }
118 else if(n%m==0)
119 {
120 return m;
121 }
122 else
123 {
124 return gcd(m,n%m);
125 }
126 }
127 LL quick(LL n,LL m,LL mod)
128 {
129 LL cnt=1;n%=mod;
130 while(m)
131 {
132 if(m&1)
133 {
134 cnt=cnt*n%mod;
135 }
136 n=n*n%mod;
137 m/=2;
138 }
139 return cnt;
140 }
141 LL mul(LL n, LL m,LL p)
142 {
143 n%=p;
144 m%=p;
145 LL ret=0;
146 while(m)
147 {
148 if(m&1)
149 {
150 ret=ret+n;
151 ret%=p;
152 }
153 m>>=1;
154 n<<=1;
155 n%=p;
156 }
157 return ret;
158 }
159 pair<LL,LL>P(LL n,LL m)
160 {
161 if(m==0)
162 {
163 pair<LL,LL>ak;
164 ak=make_pair(1,0);
165 return ak;
166 }
167 else
168 {
169 pair<LL,LL>A=P(m,n%m);
170 LL nx=A.second;
171 LL ny=A.first;
172 ny=ny-(n/m)*nx;
173 A.first=nx;
174 A.second=ny;
175 return A;
176 }
177 }
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stdlib.h>
7 #include<iostream>
8 #include<vector>
9 #include<map>
10 #include<set>
11 #include<math.h>
12 using namespace std;
13 typedef long long LL;
14 typedef struct pp
15 {
16 LL x;
17 LL y;
18 } ss;
19 ss ans[20];
20 LL quick(LL n,LL m,LL mod);
21 LL mul(LL n, LL m,LL p);
22 pair<LL,LL>P(LL n,LL m);
23 LL gcd(LL n, LL m);
24 LL mm[20];
25 int main(void)
26 {
27 int i,j,k;
28 scanf("%d",&k);
29 int __ca=0;
30 LL n,x,y;
31 while(k--)
32 {
33 __ca++;
34 scanf("%lld %lld %lld",&n,&x,&y);
35 LL sum;
36 sum=y/7-(x-1)/7;
37 if(n==0)
38 {
39 printf("Case #%d: %lld\n",__ca,sum);
40 }
41 else
42 {
43 LL mod=1;
44 for(i=0; i<n; i++)
45 {
46 scanf("%lld %lld",&ans[i].x,&ans[i].y);
47 }
48 LL anw=0;
49 LL s;
50 for(j=1; j<(1<<n); j++)
51 { LL mod=1;
52 int cr=0;
53 for(s=0; s<n; s++)
54 {
55 if(j&(1<<s))
56 {
57 mm[cr++]=s;
58 mod*=ans[s].x;
59 }
60 }mod*=7;
61 LL acm=0;
62 for(i=0; i<cr; i++)
63 {
64 LL mod1=mod/ans[mm[i]].x;
65 LL ni=quick(mod1,ans[mm[i]].x-2,ans[mm[i]].x);
66 acm=(acm+mul(mul(mod1,ni,mod),ans[mm[i]].y,mod))%mod;
67 }
68 acm%=mod;
69 acm+=mod;
70 acm%=mod;
71 anw=acm;
72 LL ctx=0;
73 if(anw>y)
74 {
75 continue;
76 }
77 else
78 {
79 if(anw<x)
80 {
81 LL ax=x-anw-1;
82 LL ay=y-anw;
83 ctx+=ay/mod-ax/mod;
84 }
85 else if(anw>=x)
86 { LL ay=y-anw;
87 ctx+=ay/mod+1;
88 }
89 }
90 if(cr%2)
91 {
92 sum-=ctx;
93 }
94 else sum+=ctx;
95 } printf("Case #%d: %lld\n",__ca,sum);
96 }
97 }
98 return 0;
99 }
100 LL gcd(LL n, LL m)
101 {
102 if(m==0)
103 {
104 return n;
105 }
106 else if(n%m==0)
107 {
108 return m;
109 }
110 else
111 {
112 return gcd(m,n%m);
113 }
114 }
115 LL quick(LL n,LL m,LL mod)
116 {
117 LL cnt=1;n%=mod;
118 while(m>0)
119 {
120 if(m&1)
121 {
122 cnt=cnt*n%mod;
123 }
124 n=n*n%mod;
125 m/=2;
126 }
127 return cnt;
128 }
129 LL mul(LL n, LL m,LL p)
130 {
131 n%=p;
132 m%=p;
133 LL ret=0;
134 while(m)
135 {
136 if(m&1)
137 {
138 ret=ret+n;
139 ret%=p;
140 }
141 m>>=1;
142 n<<=1;
143 n%=p;
144 }
145 return ret;
146 }
147 pair<LL,LL>P(LL n,LL m)
148 {
149 if(m==0)
150 {
151 pair<LL,LL>ak;
152 ak=make_pair(1,0);
153 return ak;
154 }
155 else
156 {
157 pair<LL,LL>A=P(m,n%m);
158 LL nx=A.second;
159 LL ny=A.first;
160 ny=ny-(n/m)*nx;
161 A.first=nx;
162 A.second=ny;
163 return A;
164 }
165 }
Lucky7(hdu5768)的更多相关文章
- hdu-5768 Lucky7(容斥定理+中国剩余定理)
题目链接: Lucky7 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pr ...
- HDU 5768:Lucky7(中国剩余定理 + 容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Problem Description When ?? was born, seven ...
- HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...
- hdu 5768 Lucky7 容斥
Lucky7 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...
- hdu 5768 Lucky7 中国剩余定理+容斥+快速乘
Lucky7 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
二进制枚举+容斥原理+中国剩余定理 #include<iostream> #include<cstring> #include<cstdio> #include&l ...
- HDU 5768 Lucky7 容斥原理+中国剩余定理(互质)
分析: 因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题.当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的 ...
- HDU 5768 Lucky7 (中国剩余定理+容斥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 给你n个同余方程组,然后给你l,r,问你l,r中有多少数%7=0且%ai != bi. 比较明显 ...
- 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai 的数 ...
随机推荐
- CentOS6源码安装zabbix服务器
1.下载安装包并解压 2.预环境搭建 3.创建zabbix用户,编译安装zabbix 4.配置mysql 5.配置zabbix-server 6.配置apache和php 7.添加开机自启动 1 yu ...
- 单元测试在Unity中的应用
项目描述:简单演示单元测试在Unity中的应用 项目地址:UnityTestRunner_Tutorial - SouthBegonia 项目版本:2020.3.20f1 项目用法:打开就用,代码都放 ...
- List 去重的 6 种方法,这个方法最完美!
在日常的业务开发中,偶尔会遇到需要将 List 集合中的重复数据去除掉的场景.这个时候可能有同学会问:为什么不直接使用 Set 或者 LinkedHashSet 呢?这样不就没有重复数据的问题了嘛? ...
- 【leetocode】55. Jump Game
You are given an integer array nums. You are initially positioned at the array's first index, and ea ...
- Linux学习 - 条件判断
一.判断格式 test -e /root/install.log 或 [ -e /root/install.log ] 使用echo $?查看是否正确,当返回0时表示返回正确 1 按照文件类型进行判断 ...
- Cx_Oracle 安装
1. 下载安装 2.把oci.ddl oraociei11.dll 放到C:\Python33\Lib\site-packages路径下
- Linux shell实现每天定时备份mysql数据库
每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求: 1,每天4点备份mysql数据: 2,为节省空间,删除超过3个月的所有备份数据: 3,删除超过7天的备份数据,保留3 ...
- 【Python】【Module】re
python中re模块提供了正则表达式相关操作 字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配 ...
- java上传图片或文件
转载至:http://www.xdx97.com/#/single?bid=8b351a73-922c-eadc-512e-9e248a3efde9 前端通过form表单用post方式提交文件,后台进 ...
- 【力扣】122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...