NOIP(第15届)--2009--普及组--复赛--试题与答案(NA15)

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

中小学编程红宝书.zip

关键词:

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

      2009年、普及组、复赛,第15届。

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



解析与答案:

 

1题:多项式输出

1、说明

A、试题类型:

       数学问题。

 

B、算法模型:

       多项式。

 

C、试题说明:

       多项式与数据结构往往联系紧密。

 

 

2、代码

#include <iostream>

using namespace std;

 

int a[101];

 

int main()

{

       int n,i,c=1;

       cin>>n;

       int f=n;

       for(i=1;i<=n+1;i++) cin>>a[i];

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

       {

              if(c==1)

              {

                     if(f==1)

                     {

                            if(a[i]==1)

                            {

                                   cout<<"x";

                                   f--;

                            }

                            else if(a[i]==-1)

                            {

                                   cout<<"-x";

                                   f--;

                            }

                            else if(a[i]==0)

                                   f--;

                            else

                            {

                                   cout<<a[i]<<"x";

                                   f--;

                            }

                     }

                     else if(f==0)

                            cout<<a[i];

                     else

                     {

                            if(a[i]==1)

                            {

                                   cout<<"x^"<<f;

                                   f--;

                            }

                            else if(a[i]==-1)

                            {

                                   cout<<"-x^"<<f;

                                   f--;

                            }

                            else if(a[i]==0)

                                   f--;

                            else

                            {

                                   cout<<a[i]<<"x^"<<f;

                                   f--;

                            }

                     }

                     c++;

              }

              else

              {

                     if(a[i]>0)

                            cout<<"+";

                     else if(a[i]==0)

                     {

                            f--;

                            continue;

                     }

                     if(f==1)

                     {

                            if(a[i]==1)

                            {

                                   cout<<"x";

                                   f--;

                            }

                            else if(a[i]==-1)

                            {

                                   cout<<"-x";

                                   f--;

                            }

                            else if(a[i]==0)

                                   f--;

                            else

                            {

                                   cout<<a[i]<<"x";

                                   f--;

                            }

                     }

                     else if(f==0)

                     {

                            cout<<a[i];

                            continue;

                     }

                     else

                     {

                            if(a[i]==1)

                            {

                                   cout<<"x^"<<f;

                                   f--;

                            }

                            else if(a[i]==-1)

                            {

                                   cout<<"-x^"<<f;

                                   f--;

                            }

                            else if(a[i]==0)

                                   f--;

                            else

                            {

                                   cout<<a[i]<<"x^"<<f;

                                   f--;

                            }

                     }

              }

             

       }

       return 0;

}

 

    

 

 

2题:分数线划定

2、说明

A、试题类型:

       结构体。

 

B、算法模型:

       sort。

 

C、试题说明:   

把学号、各科成绩、总成绩定义在一个结构体里。

 

主程序分三步:输入数据、排序、输出数据。

 

 

2、代码

#include <iostream>

#include <algorithm>

 

using namespace std;

 

const int N=5000;

 

struct people

{

       int k;  //报名号

       int s;  //笔试成绩

};

 

int cmp(const people &a, const people &b)

{

       if(a.s != b.s)

              return a.s > b.s;

       else

              return a.k < b.k;

}

 

int main()

{

       int n, m, pass_number;

      

       cin >> n >> m;

       people p[n];

       pass_number = m * 1.5;

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

              cin >> p[i].k >> p[i].s ;

      

      

       sort(p, p+n, cmp); //按要求排序

      

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

       {

              if(p[i].s == p[pass_number-1].s)

                     pass_number ++;

              else

                     break;

       } //考虑分数在及格线的选手有多名的情况

      

       cout << p[pass_number-1].s << " " << pass_number << endl;

       for(int i=0; i<pass_number; i++)

       {

              cout << p[i].k << " " << p[i].s << endl;

       }

      

       return 0;

}

 

   

 

3题:细胞分裂

1、说明

A、试题类型:

       生物问题。

 

B、算法模型:

       基本数学推导。

 

C、试题说明:

       无。

 

 

2、代码

#include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>

using namespace std;

 

int a0,a1,b0,b1;short n,ans;

 

inline int gcd(int a,int b)

{

       return !b?a:gcd(b,a%b);

}

 

inline int t()

{

       char ch=getchar();int k=0;

       while(ch<'0'||ch>'9') ch=getchar();

       while(ch<='9'&&ch>='0') k=k*10+ch-'0',ch=getchar();

       return k;

}

inline void P( int n)

{

       if(n>9) P(n/10);

       putchar(n%10+'0');

 

       return ;

}

 

int main()

{

       n=t();

       while(n--)

       {

              a0=t();a1=t();b0=t();b1=t();

              ans=0;

              for(int i=1;i<=sqrt(b1);i++)

              {

                     if(b1%i==0)

                     {

                            if(i%a1==0&&gcd(i/a1,a0/a1)==1&&gcd(b1/i,b1/b0)==1)

                    ans++;

                     }

                     int ii=b1/i;

                    if(b1%ii==0&&ii!=i&&ii%a1==0&&gcd(ii/a1,a0/a1)==1&&gcd(b1/ii,b1/b0)==1)

                ans++;

              }

              P(ans);putchar('\n');

       }

       return 0;

}

   

 

 

 

 

 

4题:道路游戏

1、说明

A、试题类型:

       动态规划。

 

B、算法模型:

       dp。

 

C、试题说明:

dp[j]表示截止时间j恰好有一个机器人走完的最大收益。

 

枚举这一次行走的时间k和起点i:

dp[j]=max{dp[j-k]+sum[(i+k+n-1)%n][j]-sum[(i+n-1)%n][j-k]-a[i]}。

 

其中sum[x][y]是收益的前缀和,可以预处理。

 

2、代码

#include<cstdio>

#include<cstring>

 

const int oo=0x3f3f3f3f;

int sum[1010][1010],a[1010],dp[1010],n,m,p;

 

int max(int x,int y)

{

       return x>y?x:y;

}

 

int rd()

{

       int x=0;

       char c=getchar();

       while (c<'0'||c>'9') c=getchar();

       while (c>='0'&&c<='9')

       {

              x=x*10+c-'0';

              c=getchar();

       }

       return x;

}

 

int main()

{

       int i,j,k,x,y,z;

       n=rd();

       m=rd();

       p=rd();

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

        for (j=1;j<=m;j++)

            sum[i][j]=rd();

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

                     a[i]=rd();

        for (j=2;j<=m;j++)

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

                            sum[i][j]+=sum[(i-1+n)%n][j-1];

                     for (j=1;j<=m;j++)

                     {

                            dp[j]=-oo;

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

                                   for (k=1;k<=p&&k<=j;k++)

                                          dp[j]=max(dp[j],dp[j-k]+sum[(i+k+n-1)%n][j]-sum[(i+n-1)%n][j-k]-a[i]);

                     }

                     printf("%d\n",dp[m]);

}

 

   

 


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