重走长征路---OI每周刷题记录---6月14日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041
做题原则,找不到测评地址的题不做。2018-11-28
重走长征路---OI每周刷题记录---6月14日 2014
本周共计45题+2题
测评地址:
爬山算法:
1.「luogu1337」[jsoi]平衡点 //在线测评地址https://www.luogu.org/problemnew/show/P1337
费用流:
2.NOI2008志愿者招募
扩展gcd:
3.NOI2002荒岛野人Savage
模线性方程组:
4.「poj2891」Strange Way to Express Integers
中国剩余定理:
5.「poj1006」生理周期 //在线测评地址https://vjudge.net/problem/POJ-1006
46.[TJOI2009]猜数字 //在线测评地址https://www.luogu.org/problemnew/show/P3868
47.【模板】扩展中国剩余定理(EXCRT) //在线测评地址https://www.luogu.org/problemnew/show/P4777
bfs:
6.「NOIP模拟赛」水灾
dp:
7.「NOIP模拟赛」某种数列问题
8.「cf439D」Devu and his Brother
9.「bzoj1801」[Ahoi2009]chess 中国象棋
10.「泉七培训-郑予凡」子集(40分)
bfs+状压dp+记忆化搜索:
11.「NOIP模拟赛」密码锁
bfs+费用流:
12.「NOIP模拟赛」密码锁(90分)
欧拉函数筛法:
13.「poj2478」Farey Sequence
快速幂+欧拉函数:
14.NOI2002Robot
欧拉函数:
15.「poj2407」Relatives
贪心:
16.「cf437C」The Child and Toy
17.「cf437B」The Child and Set
构造:
18.「cf439C」Devu and Partitioning of the Array
并查集:
19.「cf437D」The Child and Zoo
20.「codechefCHSEQ22」Chef and Favourite Sequence
模拟:
21.「cf437A」The Child and Homework
22.「cf440A」Forgotten Episode
23.「cf440B」Balancer
24.「cf439A」Devu, the Singer and Churu, the Joker
上下界网络流:
25.「zoj2314」Reactor Cooling
26.「zoj3229」Shoot the Bullet
27.「poj2396」Budget
28.「泉七培训-郑予凡」天罚(20分)
记忆化搜索:
29.「cf440C」One-Based Arithmetic
强连通分量+记忆化搜索:
30.「bzoj1589」[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
费用流:
31.「bzoj2661」[BeiJing wc2012]连连看
32.「bzoj1930」[Shoi2003]pacman吃豆豆(70分)
矩阵乘法:
33.「bzoj2510」弱题
三角剖分:
34.「bzoj2391」Cirno的忧郁
树链剖分+线段树:
35.「bzoj3531」[Sdoi2014]旅行
二分+树链剖分+线段树套平衡树
36.「bzoj1146」[CTSC2008]网络管理Network
树链剖分+线段树套平衡树:
37.「泉七培训-刘定峰」花园(70分)
矩阵乘法+高精度:
38.「泉七培训-郑予凡」致命漏洞
dfs:
39.「泉七培训-刘定峰」链型网络(30分)
bfs+dp+dfs:
40.「泉七培训-刘定峰」物流(30分)
树形dp:
41.「泉七培训-刘定峰」物流
交互题+其它:
42.「泉七培训-黄施霖」最近公共祖先(90分)
迭代深搜:
43.「泉七培训-黄施霖」分球(20分)
构造:
44.「泉七培训-黄施霖」分球
最小割:
45.「泉七培训-杨国烨」图
题解:
爬山算法:
1.「luogu1337」[jsoi]平衡点
//P1337 [JSOI2004]平衡点 / 吊打XXX
//在线测评地址https://www.luogu.org/problemnew/show/P1337
//看了https://www.cnblogs.com/DukeLv/p/9495789.html基本确定二分套二分+正交分解,测试点3WA,89分,已经到头
//https://www.luogu.org/discuss/show/67504联想到里面的讨论,三分套三分,才有写感觉
//有一个疑问,二分都能用三分处理吗?先想想.2019-2-22 18:02
//单调增,能用三分吗?单调减,能用三分吗?
//可能是开口向上的抛物线,也可能是开口向下的抛物线,能用三分吗?
//先提出问题,若开始摸索,要花很长时间.
//决定,采用2种方法,一是模拟退火算法,二是网络中流行的正解.先AC了该题,经验丰富了,再解决上述问题.2019-2-22 19:10
//考虑了分母不能为0的二分套二分+正交分解,测试点3WA,89分,代码如下.2019-2-24 14:32
//加上n==1的特判,估计测试数据里没有.所以再次提交,还是,测试点3WA,89分
//结果呢,竟然AC了,非上述所想,测试点3竟然是特判,不可思议.
//类测试点3的数据提供给大家
//输入
//1
//-1 9 3
//输出
//-1.000 9.000
//以下为正解AC代码,正交分解+二分套二分.思路纯正.2019-2-24 15:55
#include <stdio.h>
#include <math.h>
#define maxn 1010
int n;
double x[maxn],y[maxn],w[maxn],xs=99999,xe=-99999,ys=99999,ye=-99999,x_now,y_now;//xs x坐标的最小值,xe x坐标的最大值
double ans_x,ans_y;
double min(double a,double b){
return a<b?a:b;
}
double max(double a,double b){
return a>b?a:b;
}
double x_judge(double x0,double y0){
int i;
double L,ans_x=0;
for(i=1;i<=n;i++){
L=sqrt((x[i]-x0)*(x[i]-x0)+(y[i]-y0)*(y[i]-y0));
if(L<=0.00001)continue;//漏了此处判定,分母不能为0
ans_x+=w[i]*(x[i]-x0)/L;//向右为正
}
return ans_x;
}
double y_judge(double y0){
int i;
double x_left,x_right,x_mid,ans_y=0,L;
x_left=xs,x_right=xe;
while(x_left+0.00001<x_right){
x_mid=(x_left+x_right)/2;
if(x_judge(x_mid,y0)>=0)x_left=x_mid;
else x_right=x_mid;//此处写成else x_left=x_mid;,笔误,跟踪代码后,才发现
}
for(i=1;i<=n;i++){
L=sqrt((x[i]-x_left)*(x[i]-x_left)+(y[i]-y0)*(y[i]-y0));
if(L<=0.00001)continue;//漏了此处判定,分母不能为0
ans_y+=w[i]*(y[i]-y0)/L;
}
x_now=x_left;
return ans_y;
}
void bisection(){//二分套二分
double y_left,y_right,y_mid;
y_left=ys,y_right=ye;
while(y_left+0.00001<y_right){
y_mid=(y_left+y_right)/2;
if(y_judge(y_mid)>=0)y_left=y_mid;//此处写成y_right=y_mid;,跟踪代码后,才查出//向上为正
else y_right=y_mid;
}
y_now=y_left;
}
int main(){
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%lf%lf%lf",&x[i],&y[i],&w[i]),xs=min(xs,x[i]),xe=max(xe,x[i]),ys=min(ys,y[i]),ye=max(ye,y[i]);
if(n==1){//漏了特判,现在加上
printf("%.3lf %.3lf\n",x[1],y[1]);
return 0;
}
bisection();
printf("%.3lf %.3lf\n",x_now,y_now);
return 0;
}
//P1337 [JSOI2004]平衡点 / 吊打XXX
//在线测评地址https://www.luogu.org/problemnew/show/P1337
//看了https://www.cnblogs.com/DukeLv/p/9495789.html基本确定二分套二分+正交分解,测试点3WA,89分,已经到头
//https://www.luogu.org/discuss/show/67504联想到里面的讨论,三分套三分,才有写感觉
//有一个疑问,二分都能用三分处理吗?先想想.2019-2-22 18:02
//单调增,能用三分吗?单调减,能用三分吗?
//可能是开口向上的抛物线,也可能是开口向下的抛物线,能用三分吗?
//先提出问题,若开始摸索,要花很长时间.
//决定,采用2种方法,一是模拟退火算法,二是网络中流行的正解.先AC了该题,经验丰富了,再解决上述问题.2019-2-22 19:10
//模拟退火,比较偏爱此文代码https://www.cnblogs.com/BearChild/p/6536030.html
//无论怎么看代码,都觉得有些地方处理得不好,那么,开始自己的编写.
//sqrt((10000-(-10000))^2+(10000-(-10000))^2)*1000*1000=2.83*10000*1000*1000=2.83*10^10
//故最小值的设置,要大于2.83*10^10,初始化最小值为1e12
//喜欢此文变量的写法https://www.cnblogs.com/JoeFan/p/4341029.html
//return rand()%1000000/1000000.0;//此处写成return rand()%1000000/1000000;
//查了会.
//srand(20191231);提交67分,测试点5,6,8WA.
//srand(804589);提交89分,测试点8WA.
//调了
//return rand()%10000/10000.0;//此处写成return rand()%1000000/1000000.0;
//SA(100000);//此处写成SA(1000000);
//T*=0.97;//此处写成T*=0.98;
//才AC. 2019-2-23 23:01
//模拟退火算法,要拿满分很难,但拿70%的分数,概率还是比较大的.
//一下为模拟退火算法AC代码.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define maxn 1100
double w[maxn],minw=0;
struct mass_point{
double x,y;
}a[maxn],ans,now,next;
int n;
double Rand(){
return rand()%10000/10000.0;//此处写成return rand()%1000000/1000000.0;//此处写成return rand()%1000000/1000000;
}
double dis(mass_point a,mass_point b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));//此处写成return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
double judge(mass_point b){
double ret=0;
int i;
for(i=1;i<=n;i++)ret+=w[i]*dis(a[i],b);
if(ret<minw)minw=ret,ans=b;
return ret;
}
void SA(double T){
int i;
double dE;
now=ans;
while(T>0.001){
next.x=now.x+(Rand()*2-1)*T;//此处写成next.x+=now.x+(rand()*2-RAND_MAX)*T;昏招
next.y=now.y+(Rand()*2-1)*T;//此处写成next.y+=now.y+(rand()*2-RAND_MAX)*T;昏招
dE=judge(now)-judge(next);
if(dE>0||exp(dE/T)>Rand())now=next;
T*=0.97;//此处写成T*=0.98;
}
for(i=1;i<=1000;i++){
next.x=ans.x+(Rand()*2-1)*T;//此处写成next.x=now.x+(rand()*2-RAND_MAX)*T;
next.y=ans.y+(Rand()*2-1)*T;//此处写成next.y=now.y+(rand()*2-RAND_MAX)*T;
judge(next);
}
}
int main(){
int i;
srand(20191231);
ans.x=0,ans.y=0;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%lf%lf%lf",&a[i].x,&a[i].y,&w[i]),ans.x+=a[i].x,ans.y+=a[i].y;
ans.x/=n,ans.y/=n,minw=judge(ans);
SA(100000);//此处写成SA(1000000);
printf("%.3lf %.3lf\n",ans.x,ans.y);
return 0;
}
//P1337 [JSOI2004]平衡点 / 吊打XXX
//在线测评地址https://www.luogu.org/problemnew/show/P1337
//看了https://www.cnblogs.com/DukeLv/p/9495789.html基本确定二分套二分+正交分解,测试点3WA,89分,已经到头
//https://www.luogu.org/discuss/show/67504联想到里面的讨论,三分套三分,才有写感觉
//有一个疑问,二分都能用三分处理吗?先想想.2019-2-22 18:02
//单调增,能用三分吗?单调减,能用三分吗?
//可能是开口向上的抛物线,也可能是开口向下的抛物线,能用三分吗?
//先提出问题,若开始摸索,要花很长时间.
//决定,采用2种方法,一是模拟退火算法,二是网络中流行的正解.先AC了该题,经验丰富了,再解决上述问题.2019-2-22 19:10
//考虑了分母不能为0的二分套二分+正交分解,测试点3WA,89分,代码如下.2019-2-24 14:32
#include <stdio.h>
#include <math.h>
#define maxn 1010
int n;
double x[maxn],y[maxn],w[maxn],xs=99999,xe=-99999,ys=99999,ye=-99999,x_now,y_now;//xs x坐标的最小值,xe x坐标的最大值
double ans_x,ans_y;
double min(double a,double b){
return a<b?a:b;
}
double max(double a,double b){
return a>b?a:b;
}
double x_judge(double x0,double y0){
int i;
double L,ans_x=0;
for(i=1;i<=n;i++){
L=sqrt((x[i]-x0)*(x[i]-x0)+(y[i]-y0)*(y[i]-y0));
if(L<=0.00001)continue;//漏了此处判定,分母不能为0
ans_x+=w[i]*(x[i]-x0)/L;//向右为正
}
return ans_x;
}
double y_judge(double y0){
int i;
double x_left,x_right,x_mid,ans_y=0,L;
x_left=xs,x_right=xe;
while(x_left+0.00001<x_right){
x_mid=(x_left+x_right)/2;
if(x_judge(x_mid,y0)>=0)x_left=x_mid;
else x_right=x_mid;//此处写成else x_left=x_mid;,笔误,跟踪代码后,才发现
}
for(i=1;i<=n;i++){
L=sqrt((x[i]-x_left)*(x[i]-x_left)+(y[i]-y0)*(y[i]-y0));
if(L<=0.00001)continue;//漏了此处判定,分母不能为0
ans_y+=w[i]*(y[i]-y0)/L;
}
x_now=x_left;
return ans_y;
}
void bisection(){//二分套二分
double y_left,y_right,y_mid;
y_left=ys,y_right=ye;
while(y_left+0.00001<y_right){
y_mid=(y_left+y_right)/2;
if(y_judge(y_mid)>=0)y_left=y_mid;//此处写成y_right=y_mid;,跟踪代码后,才查出//向上为正
else y_right=y_mid;
}
y_now=y_left;
}
int main(){
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%lf%lf%lf",&x[i],&y[i],&w[i]),xs=min(xs,x[i]),xe=max(xe,x[i]),ys=min(ys,y[i]),ye=max(ye,y[i]);
bisection();
printf("%.3lf %.3lf\n",x_now,y_now);
return 0;
}
//P1337 [JSOI2004]平衡点 / 吊打XXX
//在线测评地址https://www.luogu.org/problemnew/show/P1337
//为了演练 模拟退火 算法,找到该题
//因自带版本支持luogu不利,在noi linux下装了firefox,费了好大劲,该系统还要慢慢熟悉
//研究了题目,发现考的是物理,考物理的重心。已经考到了物理竞赛的层面。
//用重心公式计算样例,发现输出不对。
//仔细想了想,该题考的是物体平衡问题。
//n个力处理的最好方式,是正交分解,计算合力是否为0
//计算合力,编写一个函数。
//x,y两个坐标进行枚举
//最好的方式,还是x进行二分,对应每个x值,y再进行二分。
//二分套二分
//此句描述多余,假设绳子是完全弹性的(不会造成能量损失)
//20000^2+20000^2=8*10^8 1000*8*10^8=8*10^11 int容易溢出 采用 long long
//想不到,long long采用%d方式输出,在linux编译,会出现警告,真是太好了。
//二分有些想法,分错了方向,笔误不断,跟踪是个好办法,问题一个一个找到,排除
//样例通过,提交89分。测试点3 WA。凭借深厚的物理功底,该题得分比较满意。2019-2-22
//以下为89分代码,思路 正交分解+二分套二分
#include <stdio.h>
#include <math.h>
#define maxn 1010
int n;
double x[maxn],y[maxn],w[maxn],xs=99999,xe=-99999,ys=99999,ye=-99999,x_now,y_now;//xs x坐标的最小值,xe x坐标的最大值
double ans_x,ans_y;
double min(double a,double b){
return a<b?a:b;
}
double max(double a,double b){
return a>b?a:b;
}
double x_judge(double x0,double y0){
int i;
double L,ans_x=0;
for(i=1;i<=n;i++)L=sqrt((x[i]-x0)*(x[i]-x0)+(y[i]-y0)*(y[i]-y0)),ans_x+=w[i]*(x[i]-x0)/L;//向右为正
return ans_x;
}
double y_judge(double y0){
int i;
double x_left,x_right,x_mid,ans_y=0,L;
x_left=xs,x_right=xe;
while(x_left+0.00001<x_right){
x_mid=(x_left+x_right)/2;
if(x_judge(x_mid,y0)>=0)x_left=x_mid;
else x_right=x_mid;//此处写成else x_left=x_mid;,笔误,跟踪代码后,才发现
}
for(i=1;i<=n;i++)L=sqrt((x[i]-x_left)*(x[i]-x_left)+(y[i]-y0)*(y[i]-y0)),ans_y+=w[i]*(y[i]-y0)/L;
x_now=x_left;
return ans_y;
}
void bisection(){//二分套二分
double y_left,y_right,y_mid;
y_left=ys,y_right=ye;
while(y_left+0.00001<y_right){
y_mid=(y_left+y_right)/2;
if(y_judge(y_mid)>=0)y_left=y_mid;//此处写成y_right=y_mid;,跟踪代码后,才查出//向上为正
else y_right=y_mid;
}
y_now=y_left;
}
int main(){
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%lf%lf%lf",&x[i],&y[i],&w[i]),xs=min(xs,x[i]),xe=max(xe,x[i]),ys=min(ys,y[i]),ye=max(ye,y[i]);
bisection();
printf("%.3lf %.3lf\n",x_now,y_now);
return 0;
}
费用流:
2.NOI2008志愿者招募
扩展gcd:
3.NOI2002荒岛野人Savage
模线性方程组:
4.「poj2891」Strange Way to Express Integers
中国剩余定理:
5.「poj1006」生理周期
//Biorhythms POJ - 1006
//在线测评地址https://vjudge.net/problem/POJ-1006
//中国剩余定理,此文介绍得好https://www.cnblogs.com/MashiroSky/p/5918158.html
//比较喜欢此文代码https://blog.csdn.net/niiick/article/details/80229217
//The value d is the given date and may be smaller than any of p, e, or i.
//d值 难于 理解
//题意不清,难于看懂,先编程试试
//编程过程中,发现,d怎么用,样例还是讲清楚了,
//输入
//0 0 0 0
//0 0 0 100
//输出
//Case 1: the next triple peak occurs in 21252 days.
//Case 2: the next triple peak occurs in 21152 days.
//d是用来扣除的。
//遇到余数是0,犯愁了
//仔细一想,计算后,chinaCRT返回结果若是0,就表示是整数倍周期,
//进行特判。
//样例通过,提交Wrong Answer.2019-2-26
//仔细想了想,ans-a[4]可能是负数。
//参考此文https://www.cnblogs.com/zbtrs/p/7496457.html
//或者答案小于d,我们也需要累加直到大于d.
//题意不清,给该题的解答造成很大困扰。
//提交AC。2019-2-26
//学了词组,not counted不计算在内。
//学了词组,mental curve心理曲线
//该句最为核心You task is to determine the number of days from the given date to the next triple peak.
//The value d is the given date and may be smaller than any of p, e, or i.
//题意总算看懂,核心还是d的理解,能力提升,还是要多读多练。
#include <stdio.h>
int a[8],m[8],b[8];
int exgcd(int a,int b,int *x,int *y){
int t,d;
if(b==0){
*x=1,*y=0;
return a;
}
d=exgcd(b,a%b,x,y);
t=*x,*x=*y,*y=t-a/b**y;
return d;
}
int chinaCRT(int *a){
int lcm=1,ans=0,i,x,y;
b[1]=23,b[2]=28,b[3]=33;
for(i=1;i<=3;i++)lcm*=b[i];
for(i=1;i<=3;i++)m[i]=lcm/b[i];
for(i=1;i<=3;i++){
exgcd(m[i],b[i],&x,&y);
x=(x%b[i]+b[i])%b[i];
ans=(ans+x*m[i]*a[i])%lcm;//此处写成ans+=x*m[i]*a[i];
}
return ans;
}
int main(){
int i,j,tag,k=0,ans;
while(1){
tag=1;
for(i=1;i<=4;i++){
scanf("%d",&a[i]);
if(a[i]==-1)tag*=1;
else tag*=0;
}
if(tag)break;//全是-1
k++;
ans=chinaCRT(a);
if(ans<=a[4])ans+=21252;
ans-=a[4];
printf("Case %d: the next triple peak occurs in %d days.\n",k,ans);//此处写成printf("Case %d: the next triple peak occurs in %d days.\n",k,ans-a[4]);
}
return 0;
}
46.[TJOI2009]猜数字
//P3868 [TJOI2009]猜数字
//在线测评地址https://www.luogu.org/problemnew/show/P3868
//中国剩余定理 裸题
//题意很明确了,使用long long
//样例通过,提交90分,测试点10WA,
//ans=(ans+m[i]*x*a[i]%LCM)%LCM;//此处写成ans=(ans+m[i]*x*a[i])%LCM;
//修改,提交90分,测试点10WA,
//翻了讨论,发现要用快速乘,
//为什么要用呢,在正常乘法中,可能long long已经溢出
//怎么编,会快速幂(幂降成乘),就会快速乘(乘将成加),
//3*4
//4/2=2,3+3=6
//2/2=1,6+6=12
//快速乘,提交90分,现在是测试点2TLE,那么,好吧,在快速乘之前先判断,采用小的进行循环。
//if(x<y)t=x,x=y,y=t;//测试点2TLE,添加此处判定,提交,还是 测试点2TLE
//x%=mod,y%=mod;//继续添加此判定,提交 还是 测试点2TLE
//x=(x%mod+mod)%mod,y=(y%mod+mod)%mod;//此处写成x%=mod,y%=mod;x,y有可能是负数
//如上修改,提交AC。2019-2-26 17:12
//想了想,快速乘,循环开始后,比较忌讳 负数,故 循环开始前,负数 要 处理成 正数。
#include <stdio.h>
#define LL long long
LL a[15],b[15],m[15];
LL k;
LL quick_mul(LL x,LL y,LL mod){
LL ans=0,t;
x=(x%mod+mod)%mod,y=(y%mod+mod)%mod;//此处写成x%=mod,y%=mod;x,y有可能是负数//继续添加此判定
if(x<y)t=x,x=y,y=t;//测试点2TLE,添加此处判定
while(y){
if(y&1)ans=(ans+x)%mod;
x=(x+x)%mod;
y>>=1;//此处写成y>>=2;竟有如此笔误
}
return ans;
}
LL exgcd(LL a,LL b,LL *x,LL *y){
LL d,t;
if(b==0){
*x=1,*y=0;
return a;
}
d=exgcd(b,a%b,x,y);
t=*x,*x=*y,*y=t-a/b**y;
return d;
}
LL chinaCRT(LL *a,LL *b){
LL ans=0,LCM=1,x,y,i;
for(i=1;i<=k;i++)LCM*=b[i];
for(i=1;i<=k;i++)m[i]=LCM/b[i];
for(i=1;i<=k;i++){
exgcd(m[i],b[i],&x,&y);
x=(x%b[i]+b[i])%b[i];
ans=(ans+quick_mul(quick_mul(m[i],x,LCM),a[i],LCM))%LCM;//此处写成ans=(ans+quick_mul(quick_mul(m[i],x,LCM),a[i],LCM))%LCM;//此处写成ans=(ans+m[i]*x*a[i])%LCM;
}
return ans;
}
int main(){
LL i;
scanf("%lld",&k);
for(i=1;i<=k;i++)scanf("%lld",&a[i]);
for(i=1;i<=k;i++)scanf("%lld",&b[i]);
printf("%lld\n",chinaCRT(a,b));
return 0;
}
47.【模板】扩展中国剩余定理(EXCRT)
//P4777 【模板】扩展中国剩余定理(EXCRT)
//在线测评地址https://www.luogu.org/problemnew/show/P4777
//此文代码写得不错https://blog.csdn.net/litble/article/details/75807726
//此文公式推导得不错https://blog.csdn.net/u014304190/article/details/83017060
//此文公式推导得不错https://blog.csdn.net/VictoryCzt/article/details/81070699
//long long 是必需,还得上 快速乘
//快速乘,要特别注意 负数
//样例通过,开始编写,快速乘。
//样例通过,提交AC。高兴啊2019-2-27
//该题,关于LCM的计算不能在long long溢出,若溢出,该题无法处理,只能上高精度。
#include <stdio.h>
#define LL long long
#define maxn 100100
LL a[maxn],b[maxn];
LL exgcd(LL a,LL b,LL *x,LL *y){
LL t,d;
if(b==0){
*x=1,*y=0;
return a;
}
d=exgcd(b,a%b,x,y);
t=*x,*x=*y,*y=t-a/b**y;
return d;
}
LL quick_mul(LL x,LL y,LL mod){
LL t,ans=0;
x=(x%mod+mod)%mod,y=(y%mod+mod)%mod;
if(x<y)t=x,x=y,y=t;
while(y){
if(y&1)ans=(ans+x)%mod;
x=(x+x)%mod;
y>>=1;
}
return ans;
}
int main(){
LL n,i,ans,LCM,d,x,y,c,t;
scanf("%lld",&n);
for(i=1;i<=n;i++) scanf("%lld%lld",&a[i],&b[i]);
LCM=a[1],ans=b[1];//CRT
for(i=2;i<=n;i++){
d=exgcd(LCM,a[i],&x,&y);
c=b[i]-ans;
if(c%d)return 0;//无解
t=a[i]/d;
c/=d,x=quick_mul(x,c,t),x=(x%t+t)%t;//此处写成x*=c,x=(x%t+t)%t;//x最小正数解
ans=ans+quick_mul(x,LCM,LCM*t);
LCM*=t,ans%=LCM;
}
printf("%lld\n",ans);
return 0;
}
bfs:
6.「NOIP模拟赛」水灾
dp:
7.「NOIP模拟赛」某种数列问题
8.「cf439D」Devu and his Brother
9.「bzoj1801」[Ahoi2009]chess 中国象棋
10.「泉七培训-郑予凡」子集(40分)
bfs+状压dp+记忆化搜索:
11.「NOIP模拟赛」密码锁
bfs+费用流:
12.「NOIP模拟赛」密码锁(90分)
欧拉函数筛法:
13.「poj2478」Farey Sequence
快速幂+欧拉函数:
14.NOI2002Robot
欧拉函数:
15.「poj2407」Relatives
贪心:
16.「cf437C」The Child and Toy
17.「cf437B」The Child and Set
构造:
18.「cf439C」Devu and Partitioning of the Array
并查集:
19.「cf437D」The Child and Zoo
20.「codechefCHSEQ22」Chef and Favourite Sequence
模拟:
21.「cf437A」The Child and Homework
22.「cf440A」Forgotten Episode
23.「cf440B」Balancer
24.「cf439A」Devu, the Singer and Churu, the Joker
上下界网络流:
25.「zoj2314」Reactor Cooling
26.「zoj3229」Shoot the Bullet
27.「poj2396」Budget
28.「泉七培训-郑予凡」天罚(20分)
记忆化搜索:
29.「cf440C」One-Based Arithmetic
强连通分量+记忆化搜索:
30.「bzoj1589」[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
费用流:
31.「bzoj2661」[BeiJing wc2012]连连看
32.「bzoj1930」[Shoi2003]pacman吃豆豆(70分)
矩阵乘法:
33.「bzoj2510」弱题
三角剖分:
34.「bzoj2391」Cirno的忧郁
树链剖分+线段树:
35.「bzoj3531」[Sdoi2014]旅行
二分+树链剖分+线段树套平衡树
36.「bzoj1146」[CTSC2008]网络管理Network
树链剖分+线段树套平衡树:
37.「泉七培训-刘定峰」花园(70分)
矩阵乘法+高精度:
38.「泉七培训-郑予凡」致命漏洞
dfs:
39.「泉七培训-刘定峰」链型网络(30分)
bfs+dp+dfs:
40.「泉七培训-刘定峰」物流(30分)
树形dp:
41.「泉七培训-刘定峰」物流
交互题+其它:
42.「泉七培训-黄施霖」最近公共祖先(90分)
迭代深搜:
43.「泉七培训-黄施霖」分球(20分)
构造:
44.「泉七培训-黄施霖」分球
最小割:
45.「泉七培训-杨国烨」图
重走长征路---OI每周刷题记录---6月14日 2014相关推荐
- 重走长征路---OI每周刷题记录---8月16日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---9月6日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---12月6日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---1月11日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---3月22日 2014
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---4月12日 2015
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---11月16日 2013
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---9月21日 2013 AC 17题
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
- 重走长征路---OI每周刷题记录---1月17日 2015
总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...
最新文章
- mac android 真机调试
- android 获取应用内存大小,如何在Android中获取当前内存使用量?
- axure命令行_Axure完成前端开发可行性探索
- 设置Eclipse、MyEclipse默认workspace路径
- 中国储能变流器(PCS)产业投资可行性与发展潜力分析报告2022-2028年版
- P1005 采药(Tyvj)
- 网狐框架分析八--web登录游戏大厅流程
- 作为前端开发,如何高效学习 TypeScript
- 微信小程序|开发实战篇之十-一些细节处理
- CCFA中国国际零售创新大会,观远数据用智能分析驱动零售决策
- Pecl和Pear的区别和联系?
- 后悔当初没考研。。。
- matlab处理足球数据,如何用MATLAB画一个足球出来?
- linux设置进程开机启动,Linux应用程序开机自动启动设置方法
- Python接口自动化之ddt学习笔记
- Rancher 离线安装 longhorn 存储类
- 三次改变世界、却被无情出局的程序员
- Android studio adb 不是内部或外部指令,也不是可运行的程序
- 深度学习-聊天机器人
- php fpm的pool,php-fpm的pool、PHP慢执行日志、open_basedir、php-fpm进程管理
热门文章
- mosquitto 服务器 硬件配置,MAC 下配置MQTT 服务器Mosquitto
- STL纵谈——阅读的重要性
- 软件工程是不是教会不怎么会写程序的人开发软件?说说你的观点。
- 2021年塔式起重机司机最新解析及塔式起重机司机新版试题
- 电影服务器点播系统,网上电影注册点播系统
- 计算机毕业设计javaweb的在线电影网_视频点播系统
- html 实现收藏功能实现,js实现网页收藏功能
- 青龙面板——抖抖健身 脚本+超详细教程
- ArcGIS栅格裁剪-----裁剪前后的栅…
- java数据同步解决方案_Java实现多线程数据同步的几种方法