NOIP(第19届)--2013--普及组--复赛--试题与答案(NA19)

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

中小学编程红宝书.zip


关键词:

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

      2013年、普及组、复赛,第19届。

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



解析与答案:

 

1题:计数问题

1、说明

A、试题类型:

       送分题。

 

B、算法模型:

       经典计数器 longlong。

 

C、试题说明:

       无。

 

2、代码

#include<iostream>

using namespace std;

 

int main()

{

    long long n,i,x,b,c,t=0;

    cin>>n>>x;//输入范围与要查的数字;

    for(i=1;i<=n;i++)//一到n进行循环;

    {

        b=i;//为了不改变i的值,就把i赋值给一个数;

        while(b!=0)//如果b不等于0,继续循环;

        {

            c=b%10;//求是否是x,是的话计数器加一;

            b=b/10;//求下一个数字是否为x;

            if(c==x) t++;计数器加一;

        }

    }

    cout<<t<<endl;//输出计数器的数字;

    return 0;//结束

}

2题:表达式求值

1、说明

A、试题类型:

       送分题。

 

B、算法模型:

       表达式问题。

 

C、试题说明:

       无。

 

2、代码

// luogu-judger-enable-o2

#include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

 

int main()

{

    long long shu,sum=0,cj;//shu表示当前输入的数,cj为当前阶段的和

    char ch=0,newch;//ch为上一个运算符 newch为当前输入的运算符

    bool flag=1;

 

    while(flag)

    {

        scanf("%lld",&shu);

        flag=scanf("%c",&newch)==1?true:false;//当输入结束时,while结束

        if(ch==0)

                     cj=shu;//如果刚开始输入,将阶段和置为当前数

 

        if(ch=='+')

                     sum=(sum+cj)%10000,cj=shu;//如果是+号,进行加法操作

 

        if(ch=='*')

                     cj=(cj*shu)%10000;//如果是乘号,进行乘法运算

 

        if(!flag)

                     sum=(sum+cj)%10000;//最后一次操作

 

        ch=newch;//每次输入后把旧运算符每次更新

    }

 

    printf("%lld",sum);//输出

}

3题:小朋友的数字

1、说明

A、试题类型:

       基本逻辑推理。

 

B、算法模型:

       DP。

 

C、试题说明:

    本题关键是:最终答案必定产生在第一个位置或最后一个位置。然后要注意做的过程中,不要让答案超过10亿,超过了就%p,先计算到i位置的最大字段和,再计算每个小朋友的分数。

2、代码

#include <cstdio>

#include <algorithm>

using namespace std;

 

long long a[1000005][3],n,p,maxn,x;//使用long long 以防爆表

bool bo=0;

 

int main()

{

    scanf("%lld%lld",&n,&p);

    p=abs(p);

    scanf("%lld",&x);

    a[1][1]=a[1][0]=a[1][2]=x;//处理第一位

    maxn=x;//作为目前的最大值

    for(long long i=2;i<=n;i++)

       {

        scanf("%lld",&x);

        if (a[i-1][1]>0) a[i][1]=a[i-1][1]+x;//算到i位时的最大字段和

              else a[i][1]=x;

        a[i][0]=max(maxn,a[i][1]);

        maxn=a[i][0];

    }

      

    a[2][2]=a[1][0]*2;

    if (a[2][2]>=a[1][2])

              bo=1;

      

    for (long long i=3;i<=n;i++)

              if (a[i-1][0]<0) a[i][2]=a[i-1][2]; else//计算分数

              {

                     a[i][2]=a[i-1][2]+a[i-1][0];

                     if (a[i][2]>a[1][2]) bo=1;

                     if (a[i][2]>1000000000) a[i][2]%=p;

              }

              if (bo)

                     printf("%lld\n",a[n][2]%p);

              else

                     printf("%lld\n",a[1][2]%p);

              return 0;

}

4题:车站分级

1、说明

A、试题类型:

       生活推理。

 

B、算法模型:

       代码训练。

 

C、试题说明:

       无。

 

2、代码

#include <cstdio>

#include <cstring>

#include <iostream>

#include <algorithm>

 

using namespace std;

 

#define maxn 1010

 

int n, m,first,ans=0,s,a[maxn],e[maxn][maxn],rudu[maxn],ss[maxn],top;

bool f[maxn],vis[maxn];

 

void xx()

{

    scanf("%d%d",&n,&m);

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

    {

        memset(f,0,sizeof(f));

        scanf("%d",&s);

 

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

        {

            scanf("%d",&a[j]);

            f[a[j]] = 1;

        }

 

        for (int j=a[1];j<=a[s];j++)

                     if (!f[j])

                            for (int k=1;k<=s;k++)

                                   if (!e[j][a[k]])//在起始点内不能停靠的站向可以停靠的站连有向边

                                   {

                                          e[j][a[k]]=1;

                                          rudu[a[k]]++;

                                   }

    }

}

 

void tp()

{

    first=1;

 

    while (top!=0||first)

       {

        first=0;

        top=0;

 

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

            if (!rudu[i]&&!vis[i])

            {

                ss[++top]=i;

                vis[i]=1;

            }

 

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

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

                                   if (e[ss[i]][j])

                                   {

                                          e[ss[i]][j]=0;

                                          rudu[j]--;

                                   }

                                   ans++;

       }

    ans--;//因为当top为0的时候累加器还在累加,所以最后要减去1

}

 

int main()

{

    xx();

    tp();

    printf("%d",ans);

    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