NOIP(第22届)--2016--普及组--复赛--试题与答案(NA22)

2022-07-07 已有0人阅读 作者: IT航班

中小学编程红宝书.zip


关键词:

北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。北京中学;东坝。

      2016年、普及组、复赛,第22届。

面向6-18岁中小学生,做最专业的中小学编程教育。



解析与答案:


1题:买铅笔

1、说明

A、试题类型:

       送分题。

 

B、算法模型:

       多循环连用。

 

C、试题说明:

       无。

 

2、代码

#include<cstdio>

using namespace std;

 

int i,j,k,n,m,w,ans;

 

int main()

{

       scanf("%d",&n);

       for(i=0;i<3;i++)

       {

              scanf("%d%d",&j,&k);m=j;w=k;//输入并存下初始的价格与数量

              while(j<n){j<<=1;k<<=1;}//价格与数量不断*2直到数量大于n

              while(j>n){j-=m;k-=w;}//*2有可能导致买太多了,减去一些

              while(j<n){j+=m;k+=w;}//减去之后又可能太少了,加上一些

              //其实就是大幅度地上调,然后做一些微调

              if(k<ans||ans==0)ans=k;//判断是否是最小花费

       }

       printf("%d\n",ans);

       return 0;//输出并返回

}

2题:回文日期

1、说明

A、试题类型:

       逻辑问题。

 

B、算法模型:

       枚举应用。

 

C、试题说明:

枚举月和日对应的回文年份,看回文组成的八位数是否在date1和date2范围内。

例如,对于 01 月 23 日,其对应的回文年份为 3210,其回文组成的八位数为 32100123,在和输入的 date1 与 date2 比较,看是否在其中,如果在,计数器加 1。

 

不用特判某一年是否为闰年,某年是否为闰年只会影响2月的天数,2月最多有 29 天,其对应的回文年份为9220,但9220是闰年。这样肯定也将2月28日处理了。

2、代码

#include <bits/stdc++.h>

using namespace std;

 

// 对应的月份的天数

int m[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

 

int main()

{

   

    int d1, d2;  // 输入的第一个日期和第二个日期

    cin >> d1 >> d2;

    int cnt = 0;  // 计数器,用来记录在输入的两个日期之间的回文日期的个数

    for (int i = 1; i <= 12; i++)

       {  // 枚举每个月

              for (int j = 1; j <= m[i]; j++)

              {  // 枚举每一天

                     // 求出当前月份日期对应的年份(如果要成回文)

                     // 如 10 月 31 日对应的年份应该是 1301

                     int y = j%10 * 1000 + j/10 * 100 + i%10 * 10 + i/10;

                     // 将这个回文日期算出来

                     // 如 10 月 31 日对应的日期应该是 13011031

                     int d = y*10000 + i*100 + j; 

                     if (d >= d1 && d <= d2)

                     {  // 若求出的日期在给出的两个日期之间

                            cnt++;  // 则计数器加 1

                     }

              }     

       }

    cout << cnt;  // 输出计数器即可

   

    return 0;

}

3题:海港

1、说明

A、试题类型:

       数据结构。

 

B、算法模型:

       队列应用。

 

C、试题说明:

考虑队列:

 

第一,不用考虑上限人数。

 

第二,快。

 

第三,只需把每人的国籍和时间push进队列,再存储每个国籍出现的次数即可。当输入一个新的日期时,把一天以前的人pop走,再统计不同国籍出现的次数即可。

 

可以把这个港口理解为一个旅馆,每个人只准住86400秒,时间到了就把他赶走,但是身为店主的你很健忘或是很偷懒,每当有新客人来的时候才想起来要清点哪些人超过了86400秒然后把它们赶走,这样理解,就好多了。

 

2、代码

#include<cstdio>

#define QAQ int

#define wow queue

#include<queue>

#include<string>

#include<cstring>

#include<iostream>

using namespace std;

 

 

struct Epic

{

       int Time,People;

}nowone,oldone;

 

wow <Epic> q;

QAQ n,m,form[123456],t,sum,a,b,hit;

 

QAQ main()

{

       scanf("%d",&n);

       for(int i=1;i<=n;i++)

       {

              scanf("%d %d",&a,&b);

              nowone.Time=a;//存储当前的时间

              for(int j=1;j<=b;j++)

              {

                     scanf("%d",&nowone.People);

                     q.push(nowone);//把船上的人push进队列

                     if(!form[nowone.People]) sum++;//看这是不是一个新的国籍

                     form[nowone.People]++;//这个国籍的人数+1

              }

              while(1+1==2)

              {

                     oldone=q.front();//取当前队列里第一个人的时间

                     if(nowone.Time-86400>=oldone.Time)  //如果这个人在一天以前到来

                     { 

                            form[oldone.People]--;  //就把这个人赶走

                            if(!form[oldone.People]) sum--;//他的国籍的人数-1 

                            q.pop();  //赶走

                     }  

                     else break; 

              }

              printf("%d\n",sum);

       }

}

4题:魔法阵

1、说明

A、试题类型:

       逻辑问题。

 

B、算法模型:

       枚举。

       多控制连用。

 

C、试题说明:

顺序枚举,记录一下之前有多少组合法解(类似于前缀和),最后再用乘法原理计算。同样的方法,从A的上界往A的下界枚举记录后缀和然后计算即可。

2、代码

#include<iostream>

#include<cstdio>

#include<cstring>

#define N 50005

#define M 50005

using namespace std;

 

 

int n,m,ans[M][10],num[M],a[M],A,B,C,D;

 

int read()

{

    int x=0,f=1;char ch=getchar();

    while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}

    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}

    if(f)return x;return -x;

}

 

int main()

{

    n=read();

       m=read();

 

    for(int i=1;i<=m;i++)

    {

        a[i]=read();

        num[a[i]]++;

    }

 

    for(int t=1;t*9<n;t++)

    {

        int sum=0;

        for(D=9*t+2;D<=n;D++)

        {

            C=D-t;

            B=C-6*t-1;

            A=B-2*t;

            sum+=num[A]*num[B];

            ans[C][3]+=num[D]*sum;

            ans[D][4]+=num[C]*sum;

        }

 

        sum=A=B=C=D=0;

 

        for(A=n-t*9-1;A>=1;A--)

        {

            B=A+2*t;

            C=B+6*t+1;

            D=C+t;

            sum+=num[C]*num[D];

            ans[A][1]+=num[B]*sum;

            ans[B][2]+=num[A]*sum;

        }

    }

 

    for(int i=1;i<=m;i++)

    {

        for(int j=1;j<=4;j++)

        {

            cout<<ans[a[i]][j]<<" ";

        }

        cout<<endl;

    }

    return 0;

}

 




IT航班提供:课程视频、、课程书籍、竞赛辅导、少儿编程指导、课程采购、加盟、少儿编程资料、少儿编程课程、保送生、特长生、加分、中小学计算机教育、中小学信息学、竞赛、中小学信息学课程、人工智能、中小学编程加盟、少儿编程加盟、品牌加盟、技术加盟、技术指导、课程加盟、师资培训、中小学编程教辅资料、中小学编程教师培训、少儿编程教学书籍、少儿编程视频、教学书籍、教师培训、教学视频、CSP-J/S、中小学信息学课程服务、竞赛指导、课程提供、国内外计算机中小学计算机竞赛、信息学竞赛、信息学课程提供商、信息学奥林匹克。

      

IT航班支持----中小学编程比赛汇总:

 

第一部分:国内比赛(IT航班支持)   

1、软件能力认证(CSP-JS) 

2、全国青少年信息学奥林匹克联赛(NOIP)    

3、全国青少年信息学奥林匹克竞赛(NOI)

4、中国青少年………………………  

5、………………………创新挑战赛  

6、全国青少年………………………  

7、………………………

8、 恩欧希教育信息化发明创新奖  

9、世界机器人大赛(WRC) 

10、………………………大赛    

11、少………………………智能教育成果展示大赛 

12、“明天小小科学家”奖励活动

13、………………………    

14、………………………    

15、国际信息学……………………… 

16、………………………    

 

第二部分:国际比赛(IT航班支持)   

17、………………………    

18、国际………………………    

19、………………………

20、美国信息学……………………… 

21、加拿大……………………… 

22、官方邀请赛 (CCO)     

23、国际计算思维………………………    

24、美国计算机……………………… 

25、澳大利亚………………………    

 

第三部分:企业比赛(IT航班支持)   

26、微软MTA    

27、………………………挑战赛 

28、………………………科学奖 

29、………………………学奖    

30、………………………创新挑战赛 

31、………………………挑战赛 

32、………………………芯计算机表演赛 

33、………………………大赛    

 

第四部分:Scratch相关竞赛(IT航班支持)    

34、全国中小学生电脑制作大赛     

35、………………………    

36、………………………    

37、………………………    

 

第五部分:其它(IT航班支持)   

38、NOI夏令营  

39、NOI冬令营(NOIWC)  

40、全国青少年……………………… 

41、国际青少年………………………

 

联系方式:

A、官方网址:

http://www.itflight.net


B、微信公众号:

添加微信,获取资料。

image.png

 



关注公众号,获取动态。

image.png