[TJOI2009]猜数字
题目描述
现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示。其中第二组中的数字是两两互素的。求最小的非负整数n,满足对于任意的i,n - ai能被bi整除。
输入输出格式
输入数据的第一行是一个整数k,(1 ≤ k ≤ 10)。接下来有两行,第一行是:a1,a2,...,ak,第二行是b1,b2,...,bk
输出所求的整数n。
也就是求出n,让n满足bi|n-ai。我们将式子转化一下,bi|n-ai => n-aiΞ0(mod bi) => nΞai(mod bi),也就是一个同余方程了。如果只解决这一个,我们可以直接一个扩欧敲下去,但这里有k个方程。我们再看题,题目要求我们求出最小的n满足所有同余方程,并且b1,b2...bn两两互质。这不就是中国剩余定理吗?所以把板子打上去就可以了。这题要注意的是ai可能为负数,不过我们把它转成正的就可以了。还有就是直接乘会爆long long,所以我们还要用到喜闻乐见的龟快速乘。
#include <cstdio>
#define maxn 15
using namespace std; long long a[maxn], b[maxn], m[maxn], t[maxn]; inline long long read(){
register long long x(), f=; register char c(getchar());
while(c<''||''<c){ if(c=='-') f=-; c=getchar(); }
while(''<=c&&c<='')
x=(x<<)+(x<<)+(c^), c=getchar();
return x*f;
} inline long long mul(long long a, long long b, long long c){
long long ans=;
while(b){
if(b&) ans=(ans+a)%c;
a=(a<<)%c;
b>>=;
}
return ans;
} void ex_gcd(long long a, long long b, long long &x, long long &y){
if(!b) x=, y=;
else{
long long x1, y1;
ex_gcd(b, a%b, x1, y1);
x=y1, y=x1-a/b*y1;
}
} int main(){
long long n=read();
for(register int i=; i<=n; i++) a[i]=read();
for(register int i=; i<=n; i++) b[i]=read();
for(register int i=; i<=n; i++) a[i]=(a[i]%b[i]+b[i])%b[i];
long long tot=, tmp;
for(register int i=; i<=n; i++) tot*=b[i];
for(register int i=; i<=n; i++) m[i]=tot/b[i];
for(register int i=; i<=n; i++) ex_gcd(m[i], b[i], t[i], tmp),t[i]=(t[i]%b[i]+b[i])%b[i];
long long ans=;
for(register int i=; i<=n; i++) ans=(ans+mul(mul(a[i],m[i],tot),t[i],tot))%tot;
ans=(ans+tot)%tot;
printf("%lld\n", ans);
return ;
}
刚学懂中国剩余定理的可以来肝这个裸题。
[TJOI2009]猜数字的更多相关文章
- P3868 [TJOI2009]猜数字
[TJOI2009]猜数字 中国剩余定理 求解i=1 to n : x≡a[i] (mod b[i])的同余方程组 设 t= ∏i=1 to n b[i] 我们先求出 i=1 to n : x≡1 ( ...
- CRT【p3868】[TJOI2009]猜数字
Description 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n ...
- [Luogu3868] [TJOI2009]猜数字
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
- [TJOI2009]猜数字(洛谷 3868)
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
- [TJOI2009] 猜数字 - 中国剩余定理
现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意的i,n ...
- Luogu P3868 [TJOI2009]猜数字
题目链接 \(Click\) \(Here\) 中国剩余定理的板子.小心取模. #include <bits/stdc++.h> using namespace std; const in ...
- 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)
洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...
- 洛谷 P3868 [TJOI2009]猜数字
题意简述 给定\(a[1],a[2],\cdots,a[n]\) 和 \(b[1],b[2],\cdots,b[n]\),其中\(b\)中元素两两互素. 求最小的非负整数\(n\),满足对于任意的\( ...
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
随机推荐
- beta冲刺5/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(5/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 ppt制作中 数据集标注 接下来的计划 制作p ...
- day16匿名函数
匿名函数,好像也就是 lambda 表达式 先来看一段函数,返回 def func(n): return n * 3 print(func(5))15 用lambda表达式写: func = lamb ...
- html+css+js整体布局——[防止浏览器扩大,界面排版混乱]
1,body——>width:100% body { background-color: rgb(238, 238, 238); color: rgb(51, 51, 51); display: ...
- visual studio的包含目录配置问题
早上将一个项目从debug x64修改到release x64,然后包含目录都是直接从debug拷贝过来的,一模一样的路径,一直说无法include,并且路径中的文件都是存在的,配置页面的releas ...
- Class.forName()+Class.forName().newlnstance()和new语句和初始化块+static初始化块+构造方法之间的关系
先上代码 class A{ int a; static {System.out.println("载入类时执行");} public A() { ...
- centos7.4安装redis
参考连接 https://blog.csdn.net/qq_19399235/article/details/78313633/
- MongoDB 组合多个条件查询($and、$in、$gte、$lte)
一,问题描述 数据格式: id, timeStamp,count 条件1:查询 某个时间段 内的数据: timeStamp BETWEEN startTime AND endTime.比如 timeS ...
- Java虚拟机----垃圾回收与内存分配
一.垃圾回收的对象: 在Java的运行时数据区中,程序计数器和虚拟机栈.本地方法栈是随着线程的生灭而生灭,栈当中栈帧的大小在编译的时候已知,在方法结束之后栈帧出栈,这部分的垃圾回收是明确的,因此需要讨 ...
- [LeetCode] Shortest Distance to a Character 到字符的最短距离
Given a string S and a character C, return an array of integers representing the shortest distance f ...
- AJAX-快速上手(四个步骤)
## 1, ajax ajax是使用js进行在不重新加载页面的情况下,使得页面局部刷新.而传统的页面加载即需要,重新加载整个页面.它的加载是异步进行的,即在加载的同时,页面的其他部分可以正常使用,不会 ...