[Luogu3868] [TJOI2009]猜数字
题目描述
现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示。其中第二组中的数字是两两互素的。求最小的非负整数n,满足对于任意的i,n - ai能被bi整除。
输入输出格式
输入格式:
输入数据的第一行是一个整数k,(1 ≤ k ≤ 10)。接下来有两行,第一行是:a1,a2,...,ak,第二行是b1,b2,...,bk
输出格式:
输出所求的整数n。
输入输出样例
3
1 2 3
2 3 5
23
说明
所有数据中,第一组数字的绝对值不超过109(可能为负数),第二组数字均为不超过6000的正整数,且第二组里所有数的乘积不超过1018
每个测试点时限1秒
注意:对于C/C++语言,对64位整型数应声明为long long,如使用scanf, printf函数(以及fscanf, fprintf等),应采用%lld标识符。
裸的中国剩余定理,但是丧心病狂的出题人会让你爆longlong,所以只能用龟速乘。
记得龟速乘之前把逆元取模处理一下,要不然让你疯狂TLE。
#include <iostream>
#include <cstdio>
using namespace std;
#define int long long
#define reg register
inline char gc() {
static const int BS = << ;
static unsigned char buf[BS], *st, *ed;
if (st == ed) ed = buf + fread(st = buf, , BS, stdin);
return st == ed ? EOF : *st++;
}
#define gc getchar
inline int read() {
int res = ;char ch=gc();bool fu=;
while(!isdigit(ch))fu|=(ch=='-'),ch=gc();
while(isdigit(ch))res=(res<<)+(res<<)+(ch^),ch=gc();
return fu?-res:res;
}
int lcm = , ans, M;
inline int mul(int x, int y) {
int res = ;
while(y)
{
if (y & ) res = (res + x) % lcm;
x = (x + x) % lcm;
y >>= ;
}
return res;
}
void exgcd(int a, int b, int &x, int &y) {
if (!b) {x = , y = ;return ;}
exgcd(b, a % b, x, y);
int t = x;
x = y, y = t - a / b * y;
} int n;
int a[], b[]; signed main()
{
n = read();
for (reg int i = ; i <= n ; i ++) a[i] = read();
for (reg int i = ; i <= n ; i ++) b[i] = read(), lcm *= b[i], a[i] = (a[i] % b[i] + b[i]) % b[i];
for (reg int i = ; i <= n ; i ++)
{
M = lcm / b[i];
int niv, x;
exgcd(M, b[i], niv, x);
niv = (niv % b[i] + b[i]) % b[i];
ans = (ans + mul(mul(a[i], niv), M)) % lcm;
}
ans = (ans % lcm + lcm) % lcm;
cout << ans << endl;
return ;
}
[Luogu3868] [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 ( ...
 - [TJOI2009]猜数字
		
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
 - CRT【p3868】[TJOI2009]猜数字
		
Description 现有两组数字,每组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 ...
 
随机推荐
- centos7上安装zookeeper
			
centos7上安装zookeeper 1 准备工作 1.准备服务器,本次安装采用 centos7系统.内存2G.存储60G的虚拟机服务器一台: 2.服务器安装java环境: 参考文章<cent ...
 - 网关高可用之keepavlived全流程(安装/配置/验证/解析)
			
1.场景描述 因为要做网关的高可用,用到了keepalived+nginx,来保证nginx的高可用.(微服务时代之网关及注册中心高可用架构设计),如下图: 安装了keepavlived,走了一些弯路 ...
 - SWPU CTF题解
			
本博客为西南石油大学(南充校区)CTF团队赛的题解 所有题目网址:http://47.106.87.69:9000/game 今天我是流泪狗狗头 解压后发现压缩包中是一个带有密码的图片,winhex分 ...
 - 不fq安装 golang tools
			
go get -u -v github.com/golang/tools/go/buildutil ln -s $GOPATH/src/github.com/golang/tools $GOPATH/ ...
 - Docker下实战zabbix三部曲之三:自定义监控项
			
通过上一章<Docker下实战zabbix三部曲之二:监控其他机器>的实战,我们了解了对机器的监控是通过在机器上安装zabbix agent来完成的,zabbix agent连接上zabb ...
 - asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)
			
前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) 简化模式(implicit) 密码模式(resource owner passwor ...
 - win10下安装FFmpeg步骤
			
1.官方下载地址:https://ffmpeg.zeranoe.com/builds/ # 下载方式一,太慢 # 下载方式二,推荐 2.解压到D:\Program Files (x86),这个看个人喜 ...
 - Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统
			
一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...
 - 夯实Java基础系列11:深入理解Java中的回调机制
			
目录 模块间的调用 多线程中的"回调" Java回调机制实战 实例一 : 同步调用 实例二:由浅入深 实例三:Tom做题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 ...
 - ELK 学习笔记之 elasticsearch Mget操作
			
Mget操作: 查询多个文档: curl -XGET 'http://192.168.1.151:9200/_mget' -d '{"docs": [{"_index&q ...