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 给出 ...
随机推荐
- 使用 Jenkins 打包成功后 运行 出现 Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
linux 运行时 错误日志 Error starting ApplicationContext. To display the conditions report re-run your appli ...
- ubuntu14 文件夹添加/删除书签
1. 打开文件管理,进入你要添加书签的目录 2. 把鼠标移到顶部选择“Bookmarks" 3. 这是文件管理左侧可以看到 4. 右键可以选择删除
- Centos7 yum安装LNMP
1.Centos7系统库中默认是没有nginx的rpn包的,所以我们需要先更新下rpm依赖库 (1):使用yum安装nginx,安装nginx库 rpm -Uvh http://nginx.org/p ...
- 画一个心送给心爱的小姐姐,Python绘图库Turtle
Python绘图库Turtle Turtle介绍 Turtle是Python内嵌的绘制线.圆以及其他形状(包括文本)的图形模块. 一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对 ...
- Scrapy 教程(四)-命令
scrapy 没有界面,需要命令行来操作. 非常简单,总共也就十四五个命令,分为全局命令和项目命令. 全局命令 在哪都能用 常用命令 scrapy startproject name 创建项目/工程 ...
- python学习第五十四天hashlib模块的使用
hash算法 hash也做散列,也称为哈希,主要用于信息安全领域中加密算法,hash就是找一种数据内容和数据存放地址直接的映射关系. md5算法 md5讯息算法,广泛使用密码函数 md5算法的特点 1 ...
- SEM和SEO的区别?
https://www.zhihu.com/question/20307058 SEM在营销中扮演的角色:进攻 搜索引擎营销,即SEM(Search Engine Marketing),是基于搜索引擎 ...
- 34. Find First and Last Position of Element in Sorted Array (JAVA)
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- 023-OpenStack 创建实例类型临时磁盘的讲解
临时磁盘占用的那块磁盘的空间查看 [root@linux-node1 dev]# fdisk -l 磁盘 /dev/sdb:26.8 GB, 26843545600 字节,52428800 个扇区 U ...
- zabbix 安装中文无法显示的问题
vi /usr/share/zabbix/include/locales.inc.php把zh_CN后面参数写true 然后去选择语言吧. 如果,去选择语言的时候,你发现还是不能选择....提示:Yo ...