NOIP(第24届)--2018--普及组--复赛--试题与答案(NA24)

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

中小学编程红宝书.zip


关键词:

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

      2018年、普及组、复赛,第24届。

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



解析与答案:


1题:成绩

1、说明

A、试题类型:

       精度问题。

 

B、算法模型:

       强制类型转换。

 

C、试题说明:

用double 或者是 float 实数类型的时候,赋值时会有一定的区别。

 

比如说:

double a=0.2;

这个时候,计算机会将其储存为:

a=0.1999999 或者是 a=0.2000001

 

用5*a 的时候,有可能输出0(当答案<1时直接储存为0),也有可能输出1,这是一大坑。

 

避免这种情况,可采用强制类型转换,可直接进行除法运算,即可解决。

2、代码

#include<iostream>

#include<cstdio>

using namespace std;

 

int main()

{

    double a,b,c;

    cin>>a>>b>>c; 

    double res=a*0.2+b*0.3+c*0.5;

    long ans=(long) res; //强制将double类型数res转化为长整数ans。

    cout<<ans;  //输出

    return 0;

}

2题:图书管理员

1、说明

A、试题类型:

       送分问题

 

B、算法模型:

       简单应用

 

C、试题说明:

一些细节,k层循环一定要写在外面,要不然会重复累乘造成错误。

 

if else千万不要压行。

 

每次匹配b数组和cnt要置零,temp要置成一。

2、代码

#include<cstdio>

#include<algorithm>

#include<cstring>

using namespace std;

 

int a[1001];

int b[1001];

int ans[1001];

int n,q,cnt,temp;

 

bool cmpe(int a,int b)

{

    return a<b;

}

 

int main()

{

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

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

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

 

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

    {

        cnt=0;

        temp=1;

        memset(b,0,sizeof(b));

        int x,code;

        scanf("%d%d",&x,&code);

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

            temp*=10;

 

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

        {

            int cmp=a[j]%temp;

            if(cmp==code)

                b[++cnt]=a[j];

        }

 

        if(cnt==0)

            ans[i]=-1;

        else

        {

            sort(b+1,b+cnt+1,cmpe);

            ans[i]=b[1];

        }

    }

 

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

        printf("%d\n",ans[i]);

    return 0;

}

3题:棋盘

1、说明

A、试题类型:

       空间问题。

 

B、算法模型:

       暴搜加剪枝。

 

C、试题说明:

       无。

 

2、代码

#include<iostream>

#include<cstring>

 

const int N=100,wa[][2]= {{0,1},{1,0},{-1,0},{0,-1}};

int n,num,x,y,col,bol;

int ma[N+5][N+5],fg[N+5][N+5];

bool can;

 

inline int readint()

{

    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;

}

 

inline void DFS(int nx,int ny,int t,bool f)

{

    if(fg[nx][ny]!=-1&&t>=fg[nx][ny])

              return ;

      

    fg[nx][ny]=t;

    if(nx==n&&ny==n)

              return;

      

    int x1,y1;

      

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

       {

              x1=nx+wa[i][0];

              y1=ny+wa[i][1];

              if(x1<1||x1>n||y1<1||y1>n)

                     continue;

              if(ma[x1][y1]!=-1)

              {

                     bol=(ma[x1][y1]!=ma[nx][ny]);

                     DFS(x1,y1,t+bol,0);

              }

              if(ma[x1][y1]==-1&&!f)

              {

                     ma[x1][y1]=ma[nx][ny];

                     DFS(x1,y1,t+2,1);

                     ma[x1][y1]=-1;

              }

    }

}

 

int main()

{

    n=readint();

    num=readint();

      

    memset(ma,-1,sizeof(ma));

    memset(fg,-1,sizeof(fg));

      

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

       {

              x=readint();

              y=readint();

              col=readint();

              ma[x][y]=col;

    }

      

    DFS(1,1,0,0);

    cout << fg[n][n];

    return 0;

}

4题:跳房子

2、说明

A、试题类型:

       基本数据结构。

 

B、算法模型:

       单调队列优化dp。

 

C、试题说明:

       花费满足单调性,可以考虑二分。

2、代码

#include <cstdio>

#include <queue>

#include <cstring>

using namespace std;

 

typedef long long ll;

 

const int N=500010;

int n,m,s,l,r=N,mid,a[N],dis[N],tot;

ll f[N],maxn;

 

bool dp(int k)

{

       int L=m-k,R=m+k;

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

 

       f[0]=0;

       deque<int> q;

       tot=0;

       maxn=-1e16;

 

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

       {

              while (q.size()&&dis[i]-dis[q.front()]>R)

                     q.pop_front();  //保证队列中的点一定可以调到现在枚举的点

 

              while (dis[i]-dis[tot]>R&&i>tot)

                     tot++;

 

              while (dis[i]-dis[tot]>=L&&i>tot)  //保证单调

              {

                     while (q.size()&&f[q.back()]<f[tot])

                            q.pop_back();

                    

                     q.push_back(tot);

                     tot++;

              }

 

              if (q.size())

                     f[i]=f[q.front()]+(ll)a[i];  //转移

             

              if (f[i]>maxn)

                     maxn=f[i];

       }

      

       return maxn>=(ll)s;

}

 

int main()

{

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

      

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

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

      

       while (l<=r)

       {

              mid=(l+r)/2;

 

              if (dp(mid))

                     r=mid-1;

              else

                     l=mid+1;

       }

 

       if (l>500000)

              printf("-1");

       else

              printf("%d",r+1);

      

       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