NOIP 提高组  复赛  历年 试题

NOIP 2017 提高组 复赛  试题

https://wenku.baidu.com/view/70de9e29854769eae009581b6bd97f192279bf62.html可见试题

1.小凯的疑惑

https://www.luogu.org/problemnew/show/P3951可提交测评

NOIP 2016 提高组 复赛  试题

https://wenku.baidu.com/view/c58b2ffc9f3143323968011ca300a6c30d22f155.html?rec_flag=default&mark_pay_doc=2&mark_rec_page=1&mark_rec_position=2&mark_rec=view_r_1&clear_uda_param=1&sxts=1525958761290可见试题

上述试题中的2018-5-15

第二试

1.组合数问题

样例2输出有误,应为:

0

7

第一试

1.玩具谜题

https://www.luogu.org/problemnew/show/P1563可提交测评

//P1563 玩具谜题
//忽左忽右,决定还是全转化到逆时针上来
//按上述思路进行模拟
//模拟一遍成功,逆时针+,顺时针-,注意负数处理,取模处理
//需编写一个函数,输入,小人站位,小人左右手,输出逆顺时针。
//处理数C(2,1)*C(2,1)=4编起来还方便
//0 0 顺时针 0
//0 1 逆时针 1
//1 0 逆时针 1
//1 1 顺时针 0
//样例通过,提交AC。2018-5-6 11:26
//翻看了一年半前 2016-12-30写的代码,发现,水平是明显上了一个台阶。
#include <stdio.h>
#define maxn 100100
int n,m,stand[maxn];
char name[maxn][15];
int judge(int stand,int hand){//判断逆时针1 顺时针0,该函数极为关键
    if(stand==0){
        if(hand==0)return 0;
        else return 1;
    }else{
        if(hand==0)return 1;
        else return 0;
    }
}
int main(){
    int i,hand,cnt,pos=0;//pos=0表示从第一个小人开始处理
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d%s",&stand[i],name[i]);
    for(i=1;i<=m;i++){
        scanf("%d%d",&hand,&cnt);
        if(judge(stand[pos],hand)){//逆时针处理
            pos=(pos+cnt)%n;
        }else{//顺时针处理
            pos=((pos-cnt)%n+n)%n;//注意,吃出已经包含了负数处理
        }
    }
    printf("%s",name[pos]);
    return 0;
}

2.天天爱跑步

https://www.luogu.org/problemnew/show/P1600可提交测评

//P1600 天天爱跑步
//看懂样例是关键
//" 在结点 j 的观察员会选择在第 Wj 秒观察玩家, 一个玩家能被这个观察员观察到当且仅当该玩家在第 Wj秒也理到达了结点 j "
//通过样例,弄明白了,观察员,只能在某一时刻进行观察,前后时刻都观察不了
//手动模拟了样例
//看了数据范围,si=ti应可以得分 2*5=10
//wj=0也应该可以得分2*5=10
//树退化成一条链,该类型应该也可以得分3*5=15
//该题得35分应该容易
//以下代码为20分代码,测试点1,12,14,15正确 2018-5-8
#include <stdio.h>
#include <string.h>
#define maxn 300100
int n,m,s[maxn],t[maxn],w[maxn],head[maxn],cnt=0,c[maxn],time[maxn];//c[]统计观察到的玩家数
struct node{
    int to;
    int next;
}e[maxn*2];
void add_edge(int u,int v){
    cnt++,e[cnt].to=v,e[cnt].next=head[u],head[u]=cnt;
}
int main(){
    int i,u,v,s_flag=0,w_flag=0;
    memset(head,0,sizeof(head)),memset(time,0,sizeof(time));
    scanf("%d%d",&n,&m);
    for(i=1;i<n;i++){
        scanf("%d%d",&u,&v);
        add_edge(u,v),add_edge(v,u);//无向图
    }
    for(i=1;i<=n;i++)
        scanf("%d",&w[i]);
    for(i=1;i<=m;i++)
        scanf("%d%d",&s[i],&t[i]);
    for(i=1;i<=m;i++)
        if(s[i]!=t[i]){
            s_flag=1;
            break;
        }
    for(i=1;i<=n;i++)
        if(w[i]!=0){
            w_flag=1;
            break;
        }
    if(s_flag==0){//si==ti 5*2=10
        for(i=1;i<=m;i++)
            if(w[s[i]]==0)
                c[s[i]]++;
        for(i=1;i<=n;i++)
            printf("%d ",c[i]);
        return 0;
    }
    if(w_flag==0){//w[i]=0
        for(i=1;i<=m;i++)
            c[s[i]]++;
        for(i=1;i<=n;i++)
            printf("%d ",c[i]);
        return 0;
    }  
    return 0;
}

3.换教室

https://www.luogu.org/problemnew/show/P1850可提交测评

//P1850 换教室
//根据样例,弄懂题意
//看了数据范围,得分是第一关键,不要求拿满分
//最短路径,决定采用floyd算法,存储图 采用 邻接矩阵
//为了弄懂样例1,先要进行部分编码,floyd算法,邻接矩阵
//看了数据范围,发现m=0的测试点有6个,预计可以得分5/25*100=20
//m=1的测试点有7个,预计可以得分5/25*100=20
//基本是该题在考试时的得分极限。
//分块处理,先处理m=0,编好后,将样例数据略作修改,进行测试,提交,测试点4,8,21,24正确,得分16,还算满意
//最大答案测算300*90000=2.7*10^7
//再处理m=1,编好后,将样例数据略作修改,进行测试,提交,测试点4,8,21,24正确,测试点1,14,22正确,总得分28,还算满意。
//考试中,这样的得分,还算理想。2018-5-14
#include <stdio.h>
#include <string.h>
#define maxn 2100
#define maxv 310
#define INF 200000000
int e[maxv][maxv];//最大边长 2000*90000=1.8*10^8
int N,M,V,E,c[maxn],d[maxn],tmp_c[maxn];
double p[maxn];
double min(double a,double b){
    return a<b?a:b;
}
void floyd(){
    int i,j,k;
    for(k=1;k<=V;k++)
        for(i=1;i<=V;i++)
            for(j=1;j<=V;j++)
                if(e[i][j]>e[i][k]+e[k][j])
                    e[i][j]=e[i][k]+e[k][j];
}
int main(){
    int i,j,k,u,v,w;
    double ans_0=0,ans_1,ans_min=999999999;
    scanf("%d%d%d%d",&N,&M,&V,&E);
    for(i=1;i<=N;i++)scanf("%d",&c[i]);
    for(i=1;i<=N;i++)scanf("%d",&d[i]);
    for(i=1;i<=N;i++)scanf("%lf",&p[i]);
    for(i=1;i<=V;i++)//邻接矩阵初始化
        for(j=1;j<=V;j++)
            if(i==j)e[i][j]=0;
            else e[i][j]=e[j][i]=INF;
    for(i=1;i<=E;i++){//读入边
        scanf("%d%d%d",&u,&v,&w);
        e[u][v]=e[v][u]=w;
    }
    floyd();
    //print();
    for(i=2;i<=N;i++)//M==0测算
        ans_0+=e[c[i-1]][c[i]];
    if(M==0){
        printf("%.2lf",ans_0);
        return 0;
    }
    if(M==1){
        ans_min=min(ans_min,ans_0);
        for(i=1;i<=N;i++){
            memcpy(tmp_c,c,sizeof(c)),tmp_c[i]=d[i],ans_1=0;;
            for(j=2;j<=N;j++)
                ans_1+=e[tmp_c[j-1]][tmp_c[j]];//此处写成 ans_1+=e[tmp_c[i-1]][tmp_c[i]];通过跟踪才查出
            ans_1=ans_1*p[i]+ans_0*(1-p[i]);
            ans_min=min(ans_min,ans_1);
        }
        printf("%.2lf",ans_min);
        return 0;
    }
    return 0;
}
 

第二试

1.组合数问题

//NOIP  2016  提高组  复赛  day2 第1题  组合数问题  problem
//P2822 组合数问题
//在线测评地址https://www.luogu.org/problemnew/show/P2822
//杨辉三角,可用,代码量较小
//乘法逆元,因k不确定是质数,不可用
//卢卡斯Lucas定理,因k不确定是质数,不可用
//扩展卢卡斯Lucas定理,代码量较大,待定。
//采用离线的方式,2000×2000=4×10^6,不超时
//n=2000,m=2000,t=10^4
//每组数据有1+2+3+4+...+2001,(1+2001)*2001/2=2*10^6种情况
//有10^4组,2*10^6×10^4=2*10^10,肯定超时
//n=2000,m=100,t=10^4
//每组数据有1+2+3+4+...+101+101+101+...+101,(1+101)*101/2+101*1900=2*10^5种情况
//有10^4组,2*10^5×10^4=2*10^9,超时
//该题得分大致在90分,题中 测试点20,19会TLE
//杨辉三角编好后,马上在小范围内测试,没有问题,继续接下来的编写。
//程序编好,测试样例1,2通过,估计得分90,先不急提交,保存代码
//尝试编写AC代码。
//另开一个文档,开始尝试AC代码编写。
//打印了样例2中6 7的情况
//c[5][1]=0
//c[5][2]=0
//c[5][3]=0
//c[5][4]=0
//c[6][2]=0
//c[6][3]=0
//c[6][4]=0
//发现就是在6,6的杨辉三角中数0的个数,可以采用类前缀和的方式,才找0的个数
//sum[i][j]表示(0,0)->(i,j)之间0的个数,在计算时,可以直接进行统计,请注意,统计的方式是一行一行的
//编着编着,代码写出来了。
//n=2000,m=100,t=10^4
//每次1次即可,共10^4,秒过,
//提交30分,测试点2-11,13,15,17,19WA
//想了想,sum[][]比较空洞,如sum[i][0],sum[i][i]默认为0,应该进行处理
//补上空洞的代码,提交30分,测试点2-11,13,15,17,19WA
//打印了sum[][]代码,才发现,上述想法有误,6,3只是按列来取,即前6行,前3列。
//决定按列统计,
//之后,再按行统计,sum[i][j]指(0,0)->(i,j)之间0的个数
//打印了sum[i][j]数据,没问题,测试了样例,也没问题,提交0分,一看,测试代码没删
//删除测试代码,提交AC。2019-3-1
//完全独立编写,没有参考任何资料
//该题收获,遇到新的数据处理方式,不要急,要多打印中间数据进行观察,多进行数据测试
//提交前,还要测试,注意删除测试代码。
//该题,90分->100分的付出,绝不是10分,而是多一倍的汗水。2019-3-1
//以下是AC代码。
#include <stdio.h>
#include <string.h>
int c[2010][2010],k,cnt=0,sum[2010][2010];
int min(int a,int b){
    return a<b?a:b;
}
int main(){
    int i,j,n,m,t,k;
    scanf("%d%d",&t,&k);
    for(i=0;i<=2000;i++) c[i][0]=1,c[i][i]=1;
    for(i=2;i<=2000;i++)
        for(j=1;j<=i;j++)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;
    for(j=0;j<=2000;j++){//先按列统计
        cnt=0;
        for(i=j;i<=2000;i++){
            if(c[i][j]==0)cnt++;
            sum[i][j]=cnt;
        }
    }
    for(i=2;i<=2000;i++)//再按行处理
        for(j=1;j<=i;j++)
            sum[i][j]+=sum[i][j-1];
    while(t--){
        scanf("%d%d",&n,&m);
        printf("%d\n",sum[n][min(n,m)]);
    }
    return 0;
}

//NOIP  2016  提高组  复赛  day2 第1题  组合数问题  problem
//P2822 组合数问题
//在线测评地址https://www.luogu.org/problemnew/show/P2822
//杨辉三角,可用,代码量较小
//乘法逆元,因k不确定是质数,不可用
//卢卡斯Lucas定理,因k不确定是质数,不可用
//扩展卢卡斯Lucas定理,代码量较大,待定。
//采用离线的方式,2000×2000=4×10^6,不超时
//n=2000,m=2000,t=10^4
//每组数据有1+2+3+4+...+2001,(1+2001)*2001/2=2*10^6种情况
//有10^4组,2*10^6×10^4=2*10^10,肯定超时
//n=2000,m=100,t=10^4
//每组数据有1+2+3+4+...+101+101+101+...+101,(1+101)*101/2+101*1900=2*10^5种情况
//有10^4组,2*10^5×10^4=2*10^9,超时
//该题得分大致在90分,题中 测试点20,19会TLE
//杨辉三角编好后,马上在小范围内测试,没有问题,继续接下来的编写。
//程序编好,测试样例1,2通过,估计得分90,先不急提交,保存代码
//尝试编写AC代码。
//试了该代码,90分,测试点10,13TLE。
//以下是90分代码。2019-3-1
#include <stdio.h>
int c[2010][2010],k,cnt;
int min(int a,int b){
    return a<b?a:b;
}
int main(){
    int i,j,n,m,t,k,q;
    scanf("%d%d",&t,&k);
    for(i=0;i<=2000;i++) c[i][0]=1,c[i][i]=1;
    for(i=2;i<=2000;i++)
        for(j=1;j<=i;j++)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;
    while(t--){
        cnt=0;
        scanf("%d%d",&n,&m);
        for(i=0;i<=n;i++){
            q=min(i,m);
            for(j=0;j<=q;j++)
                if(c[i][j]==0)cnt++;
        }
        printf("%d\n",cnt);
    }
    return 0;
}

https://www.luogu.org/problemnew/show/P2822可提交测评

//P2822 组合数问题
//看懂题目,模拟样例是关键
//样例1很快模拟成功
//样例2也很快模拟成功,发现同样n情况下,0-n之间的数据具有对称性
//在看数据范围之前,担心组合数的计算 容易 溢出int 或是long long
//该题目标,还是要部分得分
//看了数据范围,朴素算法,测试点1-6应可以拿下
//剩下的数据,t=1应该也可以拿下部分,
//该题总体目标,希望能拿到50分以上
//统计个数 推算 (1+2000)*2000/2*10^4=2*10^6*10^4=2*10^10故int 溢出 需采用 long long
//计算 组合数 int 2^31-1 可算到 12!
//long long 2^63-1 可算到 20!
//计算组合数,采用 杨辉三角
//测试了数据,n=2000,程序中途退出
//n=110比较流畅
//充满信心,估计60分有望
//一个不当心,提交,全RE,一看 此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
//略作修改,提交,70分,测试点6,8WA,9,10,11,13RE
//数组越界,用Dev-C++4.9.9.2如何测试,想了想,测不出,是该编译器的Bug
//只能在编写的时候留个心,担心数组越界,写代码的过程,长个心眼,看看有无越界
//到目前为止,已进入 国二 水平 2018-5-15 100+20+28+70=218 目前还有两题未做
//胆子大一点,将数组开到2100*2100,提交70分,测试点6,8,9,11 WA;10,13TLE
//仔细想一想,考试还是要求稳,提交时,将数组开小些,确保部分得分。
//以下为70分代码。
//在想,需要高精度算法吗,不过,考试中若真的是高精度算法,应该不会再写下去了。
//该题,主要问题是,long long 溢出,既然最后结果是%k,何不中间结果%k
//c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;//此句此前写成 c[i][j]=(c[i-1][j-1]+c[i-1][j]) 70分,修改后90分
//测试点10,13TLE,很满意90分。2018-5-19 15:18
//以下为90分代码
//超时,发生在多次查询,因结果在查询前,已成定局,何不开个数组存储统计结果.
//因程序大动,需对样例进行重新测试,测试通过后,还要与之前的代码进行对拍,这就是大改代码的后果。
//突然想起两个名词,最后10分,两个测试点,考察的是,将“在线查询”改成“离线查询”
//没做对拍,提交30分,测试点2-11,13,15,17,19WA,所以,100分有比较大的风险。
//重新评估了该题,70分最没有风险,90分风险较小,100分,风险巨大。

//以下代码为为了得100分,而实际得30分的代码。2018-5-19 15:45

//经 对拍

//发现以下代码确实有问题,也查出了问题,提供一组 输入 输出 数据 给大家

输入:

1 2
4 0

输出:

0

#include <stdio.h>
#define LL long long
#define maxn 2100
LL c[maxn][maxn],d[maxn][maxn];
LL min(LL a,LL b){
    return a<b?a:b;
}
int main(){
    LL i,j,n,m,k,t,cnt=0;
    for(i=0;i<=2000;i++)c[i][0]=1;//此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
    for(i=0;i<=2000;i++)c[i][i]=1;//此处写成  for(i=0;i<=maxn;i++)
    scanf("%lld%lld",&t,&k);
    for(i=1;i<=2000;i++)
        for(j=1;j<=i;j++)//此处写成 for(j=1;j<=2000;j++)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;//此句此前写成 c[i][j]=(c[i-1][j-1]+c[i-1][j]) 70分,修改后90分
    for(i=0;i<=2000;i++)//此处写成 for(i=0;i<=n;i++) 查了会
        for(j=0;j<=i;j++){
            if(c[i][j]%k==0)
                cnt++;
            d[i][j]=cnt;//d[i][j]表示[0][0]->[i][j]之间的统计数量
        }
    while(t--){//查询耗时,故,算法要进行修改
        scanf("%lld%lld",&n,&m);
        printf("%lld\n",d[n][min(n,m)]);
    }
    return 0;
}

对拍程序如下:

---------------------------------------------------------------------------------------------------------------

test.cpp

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
    int i;
    double st,ed;
    for(i=1;i<=1000;i++){
        system("random");
        st=clock();
        system("p2822-3");
        ed=clock();
        system("p2822-2");
        if(system("fc data.out data.ans")){
            printf("#%d Error\n",i);
            break;
        }
        printf("#%d Success time is %.0lfms\n",i,ed-st);
    }
    return 0;
}

random.cpp

//该代码编好后,在cmd看了运行结果,之后输出到文件,又看了文件里的数据,基本确认无误,该代码编写完成.2018-5-19 16:16
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LL long long
#define max_t 3
#define max_k 5
#define max_n 6
#define max_m 10
int random(int n){
    return (LL)rand()*rand()%n;
}
int main(){
    int t,k,n,m,i;
    freopen("data.in","w",stdout);
    srand((unsigned int)time(0));
    t=random(max_t)+1;//范围1<=t<=max_t
    k=random(max_k)+2;
    printf("%d %d\n",t,k);
    while(t--){
        n=random(max_n);
        m=random(max_m);
        printf("%d %d\n",n,m);
    }
    return 0;

}

p2822-2.cpp

#include <stdio.h>
#define LL long long
#define maxn 2100
LL c[maxn][maxn];
LL min(LL a,LL b){
    return a<b?a:b;
}
int main(){
    LL i,j,n,m,k,t,cnt;
    freopen("data.in","r",stdin);
    freopen("data.ans","w",stdout);
    for(i=0;i<=2000;i++)c[i][0]=1;//此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
    for(i=0;i<=2000;i++)c[i][i]=1;//此处写成  for(i=0;i<=maxn;i++)
    scanf("%lld%lld",&t,&k);
    for(i=1;i<=2000;i++)
        for(j=1;j<=2000;j++)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;//此句此前写成 c[i][j]=(c[i-1][j-1]+c[i-1][j]) 70分,修改后90分
    while(t--){
        cnt=0;
        scanf("%lld%lld",&n,&m);
        for(i=0;i<=n;i++)
            for(j=0;j<=min(i,m);j++)
                if(c[i][j]%k==0)
                    cnt++;
        printf("%lld\n",cnt);
    }
    return 0;
}

p2822-3.cpp

#include <stdio.h>
#define LL long long
#define maxn 2100
LL c[maxn][maxn],d[maxn][maxn];
LL min(LL a,LL b){
    return a<b?a:b;
}
int main(){
    LL i,j,n,m,k,t,cnt=0;
    freopen("data.in","r",stdin);
    freopen("data.out","w",stdout);
    for(i=0;i<=2000;i++)c[i][0]=1;//此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
    for(i=0;i<=2000;i++)c[i][i]=1;//此处写成  for(i=0;i<=maxn;i++)
    scanf("%lld%lld",&t,&k);
    for(i=1;i<=2000;i++)
        for(j=1;j<=i;j++)//此处写成 for(j=1;j<=2000;j++)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;//此句此前写成 c[i][j]=(c[i-1][j-1]+c[i-1][j]) 70分,修改后90分
    for(i=0;i<=2000;i++)//此处写成 for(i=0;i<=n;i++) 查了会
        for(j=0;j<=i;j++){
            if(c[i][j]%k==0)
                cnt++;
            d[i][j]=cnt;//d[i][j]表示[0][0]->[i][j]之间的统计数量
        }
    while(t--){//查询耗时,故,算法要进行修改
        scanf("%lld%lld",&n,&m);
        printf("%lld\n",d[n][min(n,m)]);
    }
    return 0;
}

--------------------------------------------------------------------------------------------------------------

//P2822 组合数问题
//看懂题目,模拟样例是关键
//样例1很快模拟成功
//样例2也很快模拟成功,发现同样n情况下,0-n之间的数据具有对称性
//在看数据范围之前,担心组合数的计算 容易 溢出int 或是long long
//该题目标,还是要部分得分
//看了数据范围,朴素算法,测试点1-6应可以拿下
//剩下的数据,t=1应该也可以拿下部分,
//该题总体目标,希望能拿到50分以上
//统计个数 推算 (1+2000)*2000/2*10^4=2*10^6*10^4=2*10^10故int 溢出 需采用 long long
//计算 组合数 int 2^31-1 可算到 12!
//long long 2^63-1 可算到 20!
//计算组合数,采用 杨辉三角
//测试了数据,n=2000,程序中途退出
//n=110比较流畅
//充满信心,估计60分有望
//一个不当心,提交,全RE,一看 此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
//略作修改,提交,70分,测试点6,8WA,9,10,11,13RE
//数组越界,用Dev-C++4.9.9.2如何测试,想了想,测不出,是该编译器的Bug
//只能在编写的时候留个心,担心数组越界,写代码的过程,长个心眼,看看有无越界
//到目前为止,已进入 国二 水平 2018-5-15 100+20+28+70=218 目前还有两题未做
//胆子大一点,将数组开到2100*2100,提交70分,测试点6,8,9,11 WA;10,13TLE
//仔细想一想,考试还是要求稳,提交时,将数组开小些,确保部分得分。
//以下为70分代码。
//在想,需要高精度算法吗,不过,考试中若真的是高精度算法,应该不会再写下去了。
//该题,主要问题是,long long 溢出,既然最后结果是%k,何不中间结果%k
//c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;//此句此前写成 c[i][j]=(c[i-1][j-1]+c[i-1][j]) 70分,修改后90分
//测试点10,13TLE,很满意90分。2018-5-19 15:18
//以下为90分代码
#include <stdio.h>
#define LL long long
#define maxn 2100
LL c[maxn][maxn];
LL min(LL a,LL b){
    return a<b?a:b;
}
int main(){
    LL i,j,n,m,k,t,cnt;
    for(i=0;i<=2000;i++)c[i][0]=1;//此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
    for(i=0;i<=2000;i++)c[i][i]=1;//此处写成  for(i=0;i<=maxn;i++)
    scanf("%lld%lld",&t,&k);
    for(i=1;i<=2000;i++)
        for(j=1;j<=2000;j++)
            c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;//此句此前写成 c[i][j]=(c[i-1][j-1]+c[i-1][j]) 70分,修改后90分
    while(t--){
        cnt=0;
        scanf("%lld%lld",&n,&m);
        for(i=0;i<=n;i++)
            for(j=0;j<=min(i,m);j++)
                if(c[i][j]%k==0)
                    cnt++;
        printf("%lld\n",cnt);
    }
    return 0;

}

//P2822 组合数问题
//看懂题目,模拟样例是关键
//样例1很快模拟成功
//样例2也很快模拟成功,发现同样n情况下,0-n之间的数据具有对称性
//在看数据范围之前,担心组合数的计算 容易 溢出int 或是long long
//该题目标,还是要部分得分
//看了数据范围,朴素算法,测试点1-6应可以拿下
//剩下的数据,t=1应该也可以拿下部分,
//该题总体目标,希望能拿到50分以上
//统计个数 推算 (1+2000)*2000/2*10^4=2*10^6*10^4=2*10^10故int 溢出 需采用 long long
//计算 组合数 int 2^31-1 可算到 12!
//long long 2^63-1 可算到 20!
//计算组合数,采用 杨辉三角
//测试了数据,n=2000,程序中途退出
//n=110比较流畅
//充满信心,估计60分有望
//一个不当心,提交,全RE,一看 此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
//略作修改,提交,70分,测试点6,8WA,9,10,11,13RE
//数组越界,用Dev-C++4.9.9.2如何测试,想了想,测不出,是该编译器的Bug
//只能在编写的时候留个心,担心数组越界,写代码的过程,长个心眼,看看有无越界
//到目前为止,已进入 国二 水平 2018-5-15 100+20+28+70=218 目前还有两题未做
//胆子大一点,将数组开到2100*2100,提交70分,测试点6,8,9,11 WA;10,13TLE
//仔细想一想,考试还是要求稳,提交时,将数组开小些,确保部分得分。
//以下为70分代码。
#include <stdio.h>
#define LL long long
#define maxn 2100
LL c[maxn][maxn];
LL min(LL a,LL b){
    return a<b?a:b;
}
int main(){
    LL i,j,n,m,k,t,cnt;
    for(i=0;i<=2000;i++)c[i][0]=1;//此处写成 for(i=0;i<=maxn;i++) Dev-C++4.9.9.2 测不出数组越界
    for(i=0;i<=2000;i++)c[i][i]=1;//此处写成  for(i=0;i<=maxn;i++)
    for(i=1;i<=2000;i++)
        for(j=1;j<=2000;j++)
            c[i][j]=c[i-1][j-1]+c[i-1][j];
    scanf("%lld%lld",&t,&k);
    while(t--){
        cnt=0;
        scanf("%lld%lld",&n,&m);
        for(i=0;i<=n;i++)
            for(j=0;j<=min(i,m);j++)
                if(c[i][j]%k==0)
                    cnt++;
        printf("%lld\n",cnt);
    }
    return 0;
}

2.蚯蚓

https://www.luogu.org/problemnew/show/P2827可提交测评

3.愤怒的小鸟

https://www.luogu.org/problemnew/show/P2831可提交测评

NOIP 提高组 复赛 历年 试题相关推荐

  1. 2018 NOIP 提高组 复赛 day2

    文章目录 T1 旅行 T1 分析 T2 填数游戏 T2 分析 T3 保卫王国 T3 分析 不得不说-noip的趋势越来越像是day1基础+思路稳定分数,基本确定你能在哪个获奖区,day2难度提高,给满 ...

  2. 2018 NOIP 提高组 复赛 day1

    文章目录 T1 铺设道路 T1 分析 T2 货币系统 T2 分析 T3 赛道修建 T3 分析 T1 铺设道路 题目点击→洛谷 P5019 铺设道路 题目描述 春春是一名道路工程师,负责铺设一条长度为 ...

  3. NOIP-2018 提高组(复赛) 模拟试题之--T1 帽子戏法

    NOIP 2018资料下载-提取码:04uf T1 帽子戏法 问题描述 小 Y 有一个n∗n∗nn∗n∗n的"帽子立方体" ,即一个nn层的立方体,每层的帽子都 可以排成n∗nn∗ ...

  4. NOIP提高组复赛 知识点整理

    枚举.模拟.贪心.递推.排序(快排) 高精度: 加法,减法,乘法(应该只会有高精乘单精),高精度除单精 分治: 二分查找 整体二分 CDQ分治 三分 搜索: dfs.剪枝 bfs.双向bfs 启发式搜 ...

  5. NOIP 提高组复赛 day1 国王游戏

    解析代码如下: #include <stdio.h> #include <algorithm> using namespace std; typedef struct Node ...

  6. NOIP 2018提高组复赛C/C++试题及答案详解

    NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...

  7. NOIP 2008 提高组 复赛 message 传字条

    NOIP 2008 提高组 复赛 message 传字条 1.样例很快模拟成功,但感觉是凑出来的,没有章法. 2.深度优先遍历,但感觉容易超时. 3.动态规划?翻看他人代码,发现动态规划的写法,确实想 ...

  8. noip提高组初赛有感——

    本人第一次考试,感觉还好吧,误打误撞报了个提高组,觉得还是有点亏了(把普及组的脸甩在地上狠狠摩擦那种)..蒟蒻的我答后面的题时就开始困难了,但多选题答得还可以.考场有提前交卷的,大神总是很多呀- 不过 ...

  9. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

最新文章

  1. SQL基础操作_4_表的插入、更新、删除、合并操作
  2. 『奇葩问题集锦』Fedora ubuntu 下使用gulp 报错 Error: watch ENOSPC 解决方案
  3. iphone7配置_西安苹果售后维修教您iphone7发热严重、耗电快怎么解决?
  4. msf实战提权windows_ATTamp;CK实战 | 红队评估一(上)
  5. java wmi远程桌面服务器_WMI实现远程监控多台windows服务器
  6. 雾计算精华问答 | 雾计算与云计算的区别?
  7. c++ 指针拼接字符串_字符串拼接+和concat的区别
  8. 家用计算机机箱怎么选,DIY装机怎么选择电脑机箱 新手必读的电脑主机箱选购指南...
  9. 前端JavaScript开发中需要注意的代码问题
  10. java版我的世界光追,老瓶装新酒 光追版《我的世界》将至你心动了吗
  11. 解决vim打开之后乱码的问题
  12. 基于Java的高校社团管理系统
  13. CuteFTP,8uftp cuteftp
  14. 新版FMEA软件结构树图 免费申请试用(FMEAHunter)
  15. librdkafka------C kafka Client
  16. VBA实现多条件查询
  17. 一名「数据分析师」职业思考与规划
  18. 将FTP空间通过网络映射到本地电脑上
  19. esxi怎么传输文件到虚拟机_软路由篇2:3865U软路由折腾记——Esxi软虚拟机+OpenWrt教程
  20. 使用Domain Adaption提升小场景时间序列预测效果的方法

热门文章

  1. 蜂食记小程序:“吃货们”你们的福利来啦!
  2. 蓝牙nrf51822程序的分析(一)
  3. HIVE建表格式及参数说明
  4. 孩子在读研究生,父亲该做些什么?
  5. react 组件列表
  6. bnb m服务器维护,BnB M常见问题_BnB M问答_疑难解答_九游手机游戏
  7. sonarlint sonarqube 使用
  8. 在工作之余是否要兼职?
  9. 男人做事,要克服这些心理弱点
  10. 镀金天空-js逆向1