总目录详见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相关推荐

  1. 重走长征路---OI每周刷题记录---8月16日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  2. 重走长征路---OI每周刷题记录---9月6日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  3. 重走长征路---OI每周刷题记录---12月6日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  4. 重走长征路---OI每周刷题记录---1月11日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  5. 重走长征路---OI每周刷题记录---3月22日 2014

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  6. 重走长征路---OI每周刷题记录---4月12日 2015

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  7. 重走长征路---OI每周刷题记录---11月16日 2013

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  8. 重走长征路---OI每周刷题记录---9月21日 2013 AC 17题

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  9. 重走长征路---OI每周刷题记录---1月17日 2015

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

最新文章

  1. mac android 真机调试
  2. android 获取应用内存大小,如何在Android中获取当前内存使用量?
  3. axure命令行_Axure完成前端开发可行性探索
  4. 设置Eclipse、MyEclipse默认workspace路径
  5. 中国储能变流器(PCS)产业投资可行性与发展潜力分析报告2022-2028年版
  6. P1005 采药(Tyvj)
  7. 网狐框架分析八--web登录游戏大厅流程
  8. 作为前端开发,如何高效学习 TypeScript
  9. 微信小程序|开发实战篇之十-一些细节处理
  10. CCFA中国国际零售创新大会,观远数据用智能分析驱动零售决策
  11. Pecl和Pear的区别和联系?
  12. 后悔当初没考研。。。
  13. matlab处理足球数据,如何用MATLAB画一个足球出来?
  14. linux设置进程开机启动,Linux应用程序开机自动启动设置方法
  15. Python接口自动化之ddt学习笔记
  16. Rancher 离线安装 longhorn 存储类
  17. 三次改变世界、却被无情出局的程序员
  18. Android studio adb 不是内部或外部指令,也不是可运行的程序
  19. 深度学习-聊天机器人
  20. php fpm的pool,php-fpm的pool、PHP慢执行日志、open_basedir、php-fpm进程管理

热门文章

  1. mosquitto 服务器 硬件配置,MAC 下配置MQTT 服务器Mosquitto
  2. STL纵谈——阅读的重要性
  3. 软件工程是不是教会不怎么会写程序的人开发软件?说说你的观点。
  4. 2021年塔式起重机司机最新解析及塔式起重机司机新版试题
  5. 电影服务器点播系统,网上电影注册点播系统
  6. 计算机毕业设计javaweb的在线电影网_视频点播系统
  7. html 实现收藏功能实现,js实现网页收藏功能
  8. 青龙面板——抖抖健身 脚本+超详细教程
  9. ArcGIS栅格裁剪-----裁剪前后的栅…
  10. java数据同步解决方案_Java实现多线程数据同步的几种方法