欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    2020CSP普及组第二轮答案.docx

    • 资源ID:861363       资源大小:31.12KB        全文页数:18页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2020CSP普及组第二轮答案.docx

    1.优秀的拆分算法分析奇数不存在优秀的拆分。偶数一定存在优秀的拆分.从大到小枚举2的iii次方,从24到Io如果nnn能被2i2否2i整除,说明2i2Z2i是他的一个拆分项,输出。2i2i2i可以表示为1<<il<<il<<ie#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;intmain()(intn;scanf("%d"z&n);if(n%2)printf("-ln");else(for(inti=24;i>=1;-i)(if(n/(1«i)-1)(n-=(1«i);printf("%d",1«i);)return0;)123456789101112131415161718192021算法拓展打表。预处理出2i2i2i次方的值,用数组存起来。对每个预处理的值进行标记。倒序枚举nnn,如果枚举的值被标记了,说明他是2i2N2i。可以直接输出,相应的nnn的值也要减去2i2Z2#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;intb30=0,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216;intv18000000;intmain()(intn;scanf("%d",&n);if(n%2)(printf("-l");return0;)for(inti=1;i<=24;+i)vbi=1;intx=n;while(x)(ifMM)printf("%d",x);n=x;else-x;)returnO;)123456789IO111213141516171819202122232425262.直播获奖算法分析每个选手的成绩取值范围是0,6000,6000,600,可以用hash思想。读到一个成绩的时候,就标记一下。然后从600到0倒序枚举分数线统计个数,当个数大于等于获奖人数时退出,此时就是答案。时间复杂度O(60On)O(60On)O(600n),nnn最大为10万,可以过。注意事项:对于P*w%p*w%p*w%的下取整,要注意精度跳变,可以用整除替换:p*w/100p*w/100p*w100.#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>usingnamespacestd;intf610;intmain()(intn,w,cntzd;SCanf("%d%d",&n,&w);for(registerintt=1;t<=n;+t)(scanf("%d",&d);+fd;/记录该成绩的人数有多少个ent=t*w/100;if(ent<1)ent=1;/找排名第Cnt的分数ints=0zk;for(k=600;k>=0;-k)(s+=fk;if(s>=ent)break;)printf("%d",k);)return0;)123456789101112131415161819202122232425262728算法拓展1.插入排序。由大到小排序,增加一个人时,直接向前邻项交换。由大到小取。排到最后,其实就相当于一遍完整插入排序的时间匏杂度。插入排序时间复杂度不稳定,最坏情况是O(n2)O(n2)O(n2),最好情况是0(n)O(n)O(n),不知道能过多少点。2 .对顶堆。对顶堆可以维护单调区间第k大数或第k小数。本题适用于求第k大数。左边的是小根堆ql,右边的是大根堆q20两者拼接起来就是由大到小。假设该轮的获奖人数为t。第X个选手成绩出来后,如果此时ql的个数小于3则把X丢进ql。如果ql的个数还是小于t,则q2的堆顶出堆,进入ql,直到ql的个数等于t.此时ql的堆顶分数就是答案。入堆和出堆时间复杂度都是IOgIoglog的,整体复杂度0(nIogn)O(nlogn)O(nlogn)03 .表达式算法分析对于后缀表达式的计算,朴素的算法可以借助数字栈。从左到右扫描,遇到数字就入栈,遇到操作符op,从栈中依次弹出两个数字x2和xl,进行运算X10PX2×1,op,×2xlopx2,然后将运算结果再入栈。如果是动态取反某个数字q次查询,这个复杂度就高了,为0(n*q)O(n*q)O(n*q)对于这种改变的地方很少,但是需要整体结果的,就需要考虑将改变的影响降到最少。表达式树。建立表达式树的时候还得借助栈。在表达式中,数字都是叶结点,运算符都是非叶结点。叶结点的编号按照Ln进行,运算符按照从左到右的顺序在n的基础上分别加1。结点开结构体,存父节点、左右儿子、值、字符。structnode(intparzIchild,rchildzdata;charc;stree1000010;12345字符串用getchargetchargetchar读入。当读入XXX的时候,后面跟的就是数字,把数字处理出来,然后建立结点并入栈。当读入!!的时候,建立结点,栈顶的结点作为该结点的左儿子。当读入&&&和III时,建立结点,栈顶的结点分别作为他们的右儿子和左儿子。这样就建成了表达式树。根结点的值就是整体结果。查询时。取反的结点都是叶结点。只需要改变该叶结点到根结点之间的结点的值就可以了。如果数据是随机的,每次查询的平均复杂度就是IogIoglog级别的。一个很重要的优化:当某个结点的值和原先的值相同时,则直接返回根节点的值。本题有特殊数据,以下代码官方数据能得95分。#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;chars1000010;inta100010zn,ent,sstack1000010,stop;structnode(intpar,Ichild,rchildzdata;charc;stree1000010;intmain()(intIen=O;while(s+len=getchar()!=,n,);slen=32;scanf("%d",&n);for(inti=1;i<=n;+i)scanf("%d"z&ai);ent=n;for(inti=1;i<=len;+i)(if(si=1×,)(intsnum=Ozt=i+1;while(st!=32)(snum=snum*10+st-,0,;+t;)sstack+stop=snum;streesnum.data=asnum;streesnum.c=asnum+'0,;elseif(si='!')(stree+cnt.Ichild=sstackstop;-stop;streestreecnt.Ichild.par=ent;streecnt.data=!streestreecnt.Ichild.data;streecnt.c='!,;sstack+stop=ent;elseif(si='&')(stree+cnt.rchild=sstackstop;-stop;streecnt.Ichild=sstackstop;-stop;streestreecnt.Ichild.par=ent;streestreecnt.rchild.par=ent;streecnt.data=streestreecnt.Ichild.data&streestreecnt.rchild.data;streecnt.c=sstack+stop=ent;elseif(si='')(stree+cnt.rchild=sstackstop;-stop;streecnt.Ichild=sstackstop;-stop;streestreecnt.Ichild.par=ent;streestreecnt.rchild.par=ent;streecnt.data=streestreecnt.Ichild.datastreestreecnt.rchild.data;streecnt.c=''sstack+stop=ent;)intq;scanf("%d,z&q);while(q-)(intt;scanf("%d",&t);intp,sres=!at;while(1)(p=street.par;if(streep.c='!')sres=!sres;elseif(streep.c='&')(if(streep.Ichild=t)sres=sres&streestreep.rchild.data;elsesres=sres&streestreep.lchild.data;Jelseif(streep.c='|)if(streep.Ichild=t)sres=sresstreestreep.rchild.data;elsesres=sresstreestreep.Ichild.data;)if(sres=streep.data)(sres=streecnt.data;break;)t=p;if(street.par=0)break;)printf("%dn"zsres);)123456789101112131415161718192021222324252627282930returnO;31323334353637383940414243444546474849505152535455565758596061626364656667686970717273

    注意事项

    本文(2020CSP普及组第二轮答案.docx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开