Educational Codeforces Round 16 D. Two Arithmetic Progressions (不互质中国剩余定理)
Two Arithmetic Progressions
题目链接:
http://codeforces.com/contest/710/problem/D
Description
You are given two arithmetic progressions: a1k + b1 and a2l + b2. Find the number of integers x such that L ≤ x ≤ R and x = a1k' + b1 = a2l' + b2, for some integers k', l' ≥ 0.
Input
The only line contains six integers a1, b1, a2, b2, L, R (0
Output
Print the desired number of integers x.
Sample Input
```
2 0 3 3 5 21
2 4 3 0 6 17
```
Sample Output
```
3
2
```
##题意:
求[L,R]区间内有多少个整数y满足 y = k1*x1+b1 且 y = k2*x2+b2. (x1 x2 >= 0)
##题解:
首先把两条直线画到平面上,题目限制了直线斜率都大于零. 又由于 x1 x2 >= 0.
所以y的区间可以进一步限制为 [max(L, max(b1,b2)), R];
问题就变为在这个新区间里找使得两个式子相等的"整点"个数了.
这里可以把两个式子通过拓展中国剩余定理(因为不互质)合并成一个式子, 然后计算区间内的解的个数即可.
注意:可能两式子不能合并,直接输出0; 正确计算区间内的解的个数(见注释).
比赛做的时候只想到了拓展中国剩余定理这里,然后想的是b不一定小于k所以不算是模方程,以为不能做.
实际上(拓展)中国剩余定理在处理同余模方程组的时候不要求余数小于模数.
##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 10000100
#define mod 100000007
#define inf 0x3f3f3f3f3f3f3f3f
#define mid(a,b) ((a+b)>>1)
#define IN freopen("in.txt","r",stdin);
using namespace std;
LL x,y,gcd;
void ex_gcd(LL a,LL b)
{
if(!b) {x=1;y=0;gcd=a;}
else {ex_gcd(b,a%b);LL temp=x;x=y;y=temp-a/b*y;}
}
LL n,m[2],a[2]; //x%m=a
LL cur, T;
/模线性方程组--不互质中国剩余定理/
int ex_China() {
LL m1,m2,n1,n2,x0;
m1=m[0];n1=a[0];
for(int i=1; i<n; i++)
{
m2=m[i];
n2=a[i];
ex_gcd(m1,m2);
if((n2-n1)%gcd) return -1;
LL tmp=m2/gcd;
x0=(x*((n2-n1)/gcd)%tmp+tmp)%tmp;
n1=n1+x0*m1;
m1=m1/gcd*m2;
}
n1=(n1+m1)%m1;
cur = n1; T = m1;
return T;
}
int main(int argc, char const *argv[])
{
//IN;
n = 2;
cin >> m[0] >> a[0] >> m[1] >> a[1];
LL L,R; cin >> L >> R;
L = max(max(a[0], a[1]), L);
int ret = ex_China();
LL ans = 0;
if(ret == -1) { /*特判不能合并的方程组*/
printf("0\n");
return 0;
}
if(cur >= L) { /*找一个合适的起点,分别计算L-1和R到这个点之间有多少个解*/
cur -= ((cur-L)/T + 1) * T;
}
if(L <= R) {
ans = (R - cur) / T - (L - 1 - cur) / T;
}
printf("%I64d\n", ans);
return 0;
}
Educational Codeforces Round 16 D. Two Arithmetic Progressions (不互质中国剩余定理)的更多相关文章
- [Educational Codeforces Round 16]D. Two Arithmetic Progressions
[Educational Codeforces Round 16]D. Two Arithmetic Progressions 试题描述 You are given two arithmetic pr ...
- [Educational Codeforces Round 16]E. Generate a String
[Educational Codeforces Round 16]E. Generate a String 试题描述 zscoder wants to generate an input file f ...
- [Educational Codeforces Round 16]C. Magic Odd Square
[Educational Codeforces Round 16]C. Magic Odd Square 试题描述 Find an n × n matrix with different number ...
- [Educational Codeforces Round 16]B. Optimal Point on a Line
[Educational Codeforces Round 16]B. Optimal Point on a Line 试题描述 You are given n points on a line wi ...
- [Educational Codeforces Round 16]A. King Moves
[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...
- Educational Codeforces Round 16 E. Generate a String dp
题目链接: http://codeforces.com/problemset/problem/710/E E. Generate a String time limit per test 2 seco ...
- Educational Codeforces Round 16 E. Generate a String (DP)
Generate a String 题目链接: http://codeforces.com/contest/710/problem/E Description zscoder wants to gen ...
- Educational Codeforces Round 16
A. King Moves water.= =. #include <cstdio> ,,,,,-,-,-}; ,-,,,-,,,-,}; #define judge(x,y) x > ...
- Educational Codeforces Round 16 A B C E
做题太久也有点累了..难题不愿做 水题不愿敲..床上一躺一下午..离下一场div2还有点时间 正好有edu的不计分场 就做了一下玩玩了 D是个数学题 F是个AC自动机 都没看明白 留待以后补 A 给出 ...
随机推荐
- 本地项目代码上传至github
初始化本地目录:git init cd到个人本地项目代码文件目录下,执行git init命令 添加项目文件到本地仓库:git add . git commit -m "提交说明" ...
- C++中的新型类型转换
1,C 语言中已经有类型之间的强制转换,C++ 做了改善: 2,C 方式的强制类型转换: 1,(Type) (Expression): 2,Type (Expression): 1,这种方式和上述方式 ...
- 对于出现拒绝访问root用户的解决方案
提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql' 由于使用mysql -u root ...
- read、readline 和 readlines 的区别?
假设a.txt的内容如下所示: 1 Hello 2 Welcome 3 What is the fuck... read:读取整个文件. read([size])方法从文件当前位置起读取size个字节 ...
- http请求响应丢包问题
在与合作方联调某个明细数据接口的时候发现 1.当请求条数为4,content-length<1500时,数据可以正确返回. 2.当请求条数为5,content-length>1500时,无 ...
- [51Nod1850] 抽卡大赛
link $solution:$ 朴素 $dp$,暴力枚举选择 $i$ 号人的第 $j$ 张卡片,朴素 $dp$ 即可,时间复杂度 $O(n^4)$ . 考虑对于朴素 $dp$ 的优化,发现其实是一个 ...
- P3190 [HNOI2007]神奇游乐园
传送门 第一道插头 $dp$ 由于讲不清楚所以假装各位早就会插头 $dp$ 了 首先要的是一个闭合回路,所以可以用括号表示法表示状态,然后大力分类讨论 $1.$ 没有右插头和下插头 那么我们可以啥也不 ...
- django报错处理:对应ip无法登陆与使用bootstrap移动端响应工具,head响应实例
1.报错 Invalid HTTP_HOST header: '192.168.1.100:8000'. You may need to add '192.168.1.100' to ALLOWED_ ...
- CentOS上安装Git及配置远程仓库
首先登陆CentOS服务器,连接上服务器之后我们使用yum remove git 命令删除已安装的Git,若之前没安装过Git则不需要这一步.注意前提是你的CentOS服务器上安装了yum,这是Cen ...
- FCC 成都社区·前端周刊 第 9 期
1. Node.js 10 将带来什么? Node.js 10 的第一个版本将于本周二(4 月 24 日)发布,并将在 10 月份推出 LTS 版本,将带来哪些更新? N-API,持续 HTTP/2 ...