NOIP2017普及组复赛解题报告
这次考试在衢州二中,这里地形太复杂了,离开考前3分钟才找到考场。无语·········所以一开考就没有好心情。这次的题目相对来以往的前几道题比较简单,但最后一道题比较难,考场上只想出来了50分的代码。
时间限制:1s 内存限制:256M
第一题:成绩 score
题目
AC记录
超级水题,NOIP史上最简单的题没有之一,只要c++如果入门的都会做,普通的运算符操作
难度:☆☆☆☆☆ (入门难度)
民间数据:100分
官方得分:100分
#include
using namespace std;
int a,b,c;
int ans;
int main()
{freopen ("score.in","r",stdin);freopen ("score.out","w",stdout);scanf ("%d %d %d",&a,&b,&c);ans=a/5+b/10*3+c/2;printf ("%d",ans);return 0;
}
这道题对于c++的选手有一个无法避免的误差,就是使用浮点数(float || double)是直接*0.3会出现t.9999999999········的情况。e.g. :10.0*0.3=2.9999999·····
这导致一些选手出现 printf (”%d”,int (ans))使结果少一,60分
第二题:图书管理员 librarian
题目
AC记录
这道题其实也不难,暴力的时间复杂度也只有O(n*q)==O(1000000),而且图书编码与需求码都用 int 存的下,唯一的难点就是判断末尾是否相等,需要一定的代码能力
难度:★☆☆☆☆ (普及-)
难点:check 处理
民间数据:100分
官方成绩:100分
#include
using namespace std;
int n,q;
int a[1010];
int main()
{freopen ("librarian.in","r",stdin);freopen ("librarian.out","w",stdout);scanf ("%d%d",&n,&q);for (int i=1;i<=n;i++)scanf ("%d",&a[i]);sort (a+1,a+n+1); //c++ STLfor (int i=1;i<=q;i++){int l,x;bool flag=0;scanf ("%d %d",&l,&x);int t=pow (10,l); //计算t 即末尾0的个数for (int i=1;i<=n;i++)if ((a[i]-x)%t==0) //重点:若x是a[i]的位数,那么(a[i]-x)%t==0{flag=1;printf ("%d\n",a[i]);break;}if (!flag)printf ("-1\n");}return 0;
}
这道题可以有变式,就是将字典编码长度与查询码长度最大为100(注意是长度,不是数值),这样对于排序就有点难了。
第三题:棋盘 chess
题目
AC记录
难度:★★☆☆☆ (普及刚好)
民间数据:100分
官方数据:100分
这道题代码量还是挺大的,考试时用记忆化搜索做的,但据说最好的解决方案是广度优先搜索,但我的方法也AC了,记忆化搜索相对来说好写一点但是
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
