NOIp2017普及组解题报告与参赛总结

合集下载

NOIP2017 解题报告 ZYH

NOIP2017  解题报告 ZYH

NOIP2017解题报告一、成绩(score)这是一道送分题。

题目明确规定A、B、C都是10的正数倍。

所以我们可以将读入进来的a、b、c都先整除10,再分别将a*2,b*3,c*5,然后相加,就是最后的答案。

且结果可以保存在longint类型中。

代码如下:vara,b,c,sum:longint;beginassign(input,'score.in');reset(input);assign(output,'score.out');rewrite(output);readln(a,b,c);sum:=a div10*2+b div10*3+c div10*5;writeln(sum);close(input);close(output);end.但倘若题目没有说明A、B、C都是10的正数倍,那么我们就将a*0.2,b*0.3,c*0.5,然后相加。

但这一次结果需存在实型中。

二、图书管理员(librarian)这是一道简单题。

其实吧,本套试卷我们要认真阅读数据规模,总能发现一些微妙的细节。

例如本题,所有的图书编码和需求码均不超过10,000,000完全可以用longint存的(那不就很棒棒了~~)对于读入的每一个需求码,我们都去循环一遍,先判断当前的这本书符不符合需求,但怎么判断呢?数据会告诉我们需求码的长度k,也就是说我们要判断当前书码的后k位是否等于需求码。

哈哈哈,没错,只要用书码mod(10的k次方)即可。

如果相等,那么进行判断取小(因为题目君说要最小的啦~~)。

所以这里如果使用了快排从小到大,那么当你找到第一个满足要求的书码就是答案。

当然不用也可以,时间复杂度为O(nq),1000,000不会炸。

话不多说,代码如下:varn,m,i,j,x,y,sum,min:longint;a:array[0..1000]of longint;procedure f(l,r:longint);varx,y,mid,t:longint;beginx:=l;y:=r;mid:=a[(l+r)div2];repeatwhile a[x]<mid do inc(x);while a[y]>mid do dec(y);if x<=y thenbegint:=a[x];a[x]:=a[y];a[y]:=t;inc(x);dec(y);end;until x>y;if l<y then f(l,y);if x<r then f(x,r);end;beginassign(input,'librarian.in');reset(input);assign(output,'librarian.out');rewrite(output);readln(n,m);for i:=1to n do readln(a[i]);f(1,n);for i:=1to m dobeginreadln(x,y);sum:=1;for j:=1to x do sum:=sum*10;min:=maxlongint;for j:=1to n doif a[j]mod sum=y then begin min:=a[j];break;end;if min=maxlongint then writeln(-1)else writeln(min);end;close(input);close(output);end.但倘若我们的需求码和编码是一些很大很大的数(longint无法承受)时,最最高大上的字符串就闪亮登场了(蹬蹬蹬,天空一声巨响,字符串闪亮登场)。

noip2017普及组复赛解题报告

noip2017普及组复赛解题报告

解法 2 最短路 Dijstra 数据太弱所以用了 dij,数据再强一点的话就需要用邻接表和 spfa 了 (毕竟普及组题难不到哪里去 写的看起来代码看起来很多, 但原理不难 把所有有颜色的点拿出来当做一张新图的结点 初始情况下这些点之间边的长度可以这样判断: 情况 1:如果两点在棋盘上位置相邻,那么同色距离为 0,异色距离为 1(对 应 tryStright 方法) 情况 2 :如果两点在棋盘上位置不相邻但有一个共同相邻的空白点可以做跳 板,使用魔法后同色距离为 2,异色距离为 3(对应 tryIndirect 方法) 然后对这张新图做最短路,求出点(1,1)到其他所有有颜色点的最短路 最后如果(m,m)有颜色, (1,1)到(m,m)之间的距离就是最短路 否则需要借助跳板(m,m-1)或(m-1,m)用魔法到(m,m).
tryIndirectPre(x[i],y[i],x[i]-1,y[i],x[i]-1,y[i]-1); //上上 下下 左左 右右 这些可能通过魔法通过跳板两步到达的点,且跳板唯一 //如原-上-上 情况 2 tryIndirectPre(x[i],y[i],x[i],y[i]+1,x[i],y[i]+2); tryIndirectPre(x[i],y[i],x[i],y[i]-1,x[i],y[i]-2); tryIndirectPre(x[i],y[i],x[i]+1,y[i],x[i]+2,y[i]); tryIndirectPre(x[i],y[i],x[i]-1,y[i],x[i]-2,y[i]); } //直接复制的自己以前写的最短路 dij 模板 //找到点(1,1)到其他所有有颜色的点的最短路 bool hasbeen[1001]; for (i=1;i<=n;i++) hasbeen[i]=false; int pos = abs(chess[1][1]); //棋盘上点(1,1)在新图 path 里是对应的第 pos 个点 for (i=1;i<=n;i++) if (i!=pos) { minPath=10000000; k=1; for ( j=1;j<=n;j++) if ( j!=pos) { if ((hasbeen[ j]==false)&&(path[pos][ j]!=-1)&&(path[pos][ j]<minPath)) { k=j; minPath=path[pos][ j]; } } hasbeen[k]=true; for ( j=1;j<=n;j++) if ( j!=pos) if((path[pos][k]!=-1)&&(path[k][ j]!=-1)) if ((path[pos][ j]>path[pos][k]+path[k][ j])||(path[pos][ j]==-1)) path[pos][ j]=path[pos][k]+path[k][ j]; }

【免费下载】NOIP普及组解题报告

【免费下载】NOIP普及组解题报告
念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每 组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望 分组的数目最少。 你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
【输入】 输入文件 group.in 包含 n+2 行: 第 1 行包括一个整数 w,为每组纪念品价格之和的上限。 第 2 行为一个整数 n,表示购来的纪念品的总件数。 第 3~n+2 行每行包含一个正整数 pi(5<=pi<=w),表示所对应纪念品的价格。
字依次表示学号为 j-1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1~n(恰好是输入数据的行号减 1)。 所给的数据都是正确的,不必检验。
【输出】 输出文件 scholar.out 共有 5 行,每行是两个用空格隔开的正整数,依次表示前 5 名学生的学号
和总分。
【输入输出样例 l】 scholar.in 6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98
scholar.out 6 265 4 264 3 258 2 244 1 237
【输入输出样例 2】 scholar.in 8 80 89 89 88 98 78 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98
scholar.out 8 265 2 264 6 264 1 258 5 258
s:integer; begin
s:=a; a:=b;
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

noip2017普及组初赛试题+答案

noip2017普及组初赛试题+答案

noip2017普及组初赛试题+答案第 23 届全国青少年信息学奥林匹克联赛初赛普及组 C++ 语言试题竞赛时间: 2017 年 10 月 14 日 14:30~16:30页,答题纸共有 2 页,满分 100 分。

请在答题纸上作答,写在试题纸选手注意:1 、试题纸共有 8 上的一律无效。

2 、不得使用任何电子设备如计算器、手机、电子词典等)或查阅任何书籍资料。

一、单项选择题(共 20 1. 在 8 位二进制补码中, A. 43 B. -85 C. -43 解析:补码就是符号位不变,结论: -85 答案 B题,每题 1.5 分,共计 30 分;每题有且仅有一个正确选项)10101011 表示的数是十进制下的 ( ) 。

D. -84其他各位逐位求反再加一2. 计算机存储数据的基本单位是 (A. bitB. ByteC. GBD. KB)。

3. 下列协议中与电子邮件无关的是( )。

A. POP3B. SMTPC. WTOD. IMAP 4. 分辨率为 800x600 、16 位色的位图,存储图像信息所需的空间为 ( )。

A.937.5KBB. 4218.75KBC.4320KBD. 2880KB 解析:800*600*16/8=A5. 计算机应用的最早领域是 ( )。

A. 数值计算B. 人工智能C. 机器人D. 过程控制6. 下列不属于面向对象程序设计语言的是 A.C B. C++ C. Java D. C# 解析:新出的语言都是面向对象的, OOP 的,旧的不是,答案 A7.NOI 的中文意思是 ( ) 。

A. 中国信息学联赛B. 全国青少年信息学奥林匹克竞赛C. 中国青少年信息学奥林匹克竞赛D. 中国计算机协会解析:全国青少年信息学奥林匹克竞赛答案:B8. 2017 年 10 月 1 日是星期日, 1999A. 星期三B. 星期日年 10 月 1 日是 ( ) 。

C. 星期五D. 星期二解析:什么年是闰年?你首先想到的可能是能被 4 整除的年就是闰年。

NOIP普及组解题分析报告

NOIP普及组解题分析报告

NOIP普及组解题报告————————————————————————————————作者:————————————————————————————————日期:NOIP2014普及组复赛解题报告本人是潍坊一中的wyw,69级,今年高一,现在马上就要NOIP了,打算把历年的NOIP普及、提高组题目都做一下,然后写写解题报告∵这个报告主要是给初中同学看的,所以我会写的详细一点Prolem 1 珠心算测试(count)这道题其实很简单,意思就是说给你一些数a1,a2,a3,a4...a n,然后让你回答有多少个A+B=C(A ≠ B ≠ C)满足(回答C的数量,而不是等式的数量)方法一那么有一种很明显的做法就是三层循环枚举C、A、B,注意:C是在最外层,若找到了一个A和一个B,满足上述等式,则C是一个符合要求的解,这时ans++,并且退出当前枚举,枚举下一个C,这种算法的时间复杂度是O(N3)而我当时没想到这个算法,因为有更好用而且简单更不容易出错的解法,方法二两重循环,分别枚举i=1...n,j=i+1...n,如果ai+aj这个数在集合中存在,那么you[a i+a j]←true,然后再从a1到a n做一次扫描,只要you[a i],ans++这个算法的好处在于它很好写,不用退出什么的,也不用注意循环的顺序,而且时间复杂度是O(N2)代码(方法2):#include<cstdio>using namespace std;int n, a[101], i, j, count;bool you[20001]={false};int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=1;i<n;i++)for(j=i+1;j<=n;j++)you[ a[i]+a[j] ]=true;count=0;for(i=1;i<=n;i++)count += you[ a[i] ];printf("%d\n",count);return 0;}在此征求一下大神的意见,如有更快的做法,敬请奉上小结:这道题很简单,但很多人没有做对的原因就是没有好好理解题意,但是根本原因其实还在于心态太骄傲了,认为是第一题就可以轻视,这样是不好的,水题我们更要做好啊,你想想同样是100分,这100分多么好拿,所以是水题、越该放平心态,细心地做。

NOIP2017复赛(普及组)解题报告!

NOIP2017复赛(普及组)解题报告!

NOIP2017复赛(普及组)解题报告!定期推送帐号信息学新闻,竞赛自主招生,信息学专业知识,信息学疑难解答,融科教育信息学竞赛培训等诸多优质内容的微信平台,欢迎分享文章给你的朋友或者朋友圈!1.成绩(score.cpp/c/pas)【问题描述】牛牛最近学习了 C++入门课程,这门课程的总成绩计算方法是:总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50%牛牛想知道,这门课程自己最终能得到多少分。

【输入格式】输入文件名为 score.in。

输入文件只有 1 行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。

相邻两个数之间用一个空格隔开,三项成绩满分都是 100 分。

【输出格式】输出文件名为 score.out。

输出文件只有 1 行,包含一个整数,即牛牛这门课程的总成绩,满分也是 100 分。

【输入输出样例 1】score.in100100 80score.out90【输入输出样例 2】score.in60 90 80score.out79【数据说明】对于 30% 的数据,A=B=0。

对于另外 30% 的数据,A = B = 100。

对于 100% 的数据,0 ≤ A、B、C ≤ 100且 A、B、C 都是 10 的整数倍。

#includeusing namespace std;int a,b,c;int main(){cin>>a>>b>>c;a/=5;b=b*3/10;c/=2;cout<><>return 0;}2. 图书管理员 (librarian.cpp/c/pas)【问题描述】图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。

每位借书的读者手中有一个需求码,这个需求码也是一个正整数。

如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。

NOIP2017普及组初赛C++试题及答案

NOIP2017普及组初赛C++试题及答案
for (i=0;i<s.length();i++)ts[]]++;
for(i= 0;i<s.length();i++)if([s[]]== 1){ cout << s[i]<< endl; return 0;
cout << "no" << endl; return 0;

输入∶xyzxyw
输出∶_
。。;
。 。 。。 。。人;人
三、阅读程序写结果(共 4题,每题 8分,共计 32 分)
1.#include using namespace std;
一int main(){ int t[256]; string s; int i;
cin >> s;
for (i=0;i<256;i++)t[i]=0;
A. POP3 B.SMTP C.WTO D.IMAP
4.分辨率为 800x600、16 位色的位图,存储图像信息所需的空间为()。
A.937.5KB B.4218.75KB C.4320KB D.2880KB
5.计算机应用的最早领域是()。
A.数值计算 B.人工智能 C.机器人 D.过程控制
6.下列不属于面向对象程序设计语言的是()。
e2)]
countcm 或 m>Count
O)]
lbound<ubound1 或I ubound>lbound

25
2.5
[m
(lboundubound+1)div 2或
(lbound+ubound+1》/2 或
(④) (1boundrubound+1)shr 1或
(lboundvubound+1)>1 或
示每条绳子的长度,第三行是一个不超过10°的正整数 m。 输出∶绳段的最大长度,若无法切割,输出 Failed。

NOIP2017普及组解题报告非官方Word版

NOIP2017普及组解题报告非官方Word版

NOIP2017普及组解题报告-by 郑佳睿1. 成绩(score.cpp/c/pas)【问题描述】牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是:总成绩= 作业成绩×20% + 小测成绩×30% + 期末考试成绩×50%牛牛想知道,这门课程自己最终能得到多少分。

【输入格式】输入文件只有1 行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。

相邻两个数之间用一个空格隔开,三项成绩满分都是100 分。

【输入样例1】100 100 80【输出样例1】90【输入样例2】60 90 80【输出样例2】79【数据说明】30% 的数据,A = B = 0。

对于另外30% 的数据,A = B = 100。

对于100% 的数据,0 ≤A、B、C ≤100 且A、B、C 都是10 的整数倍。

【题解】超级水题,输入数据都是10的倍数,不用考虑浮点的问题,直接输出答案。

【代码】#include<bits/stdc++.h>using namespace std;int a,b,c;int main(){cin>>a>>b>>c;cout<<(a*2+b*3+c*5)/10<<endl;return 0;}2. 图书管理员(librarian.cpp/c/pas)【问题描述】图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。

每位借书的读者手中有一个需求码,这个需求码也是一个正整数。

如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。

小D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他需要的书,请输出-1【输入格式】输入文件的第一行,包含两个正整数n 和q,以一个空格分开,分别代表图书馆里书的数量和读者的数量。

NOIP2017第二十三届全国青少年信息学奥林匹克联赛初赛普及组答案

NOIP2017第二十三届全国青少年信息学奥林匹克联赛初赛普及组答案
2.3
三、阅读程序写结果(共4题,每题8分,共计32分)
1.
z
2.
8
3.
11
4.
输出1:1 3
(3分)
输出2:2017 1
(5分)
四、完善程序(共计28分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报CCF NOI科学委员会复核)
Pascal语言
C++语言
C语言
count+=len[i]
(2)
count<m或m>count
2.5
(3)
lbound<ubound或ubound>lbound
3
(lbound+ubound+1) div 2或
(lbound+ubound+1)/2或
(4)
(lbound+ubound+1) shr 1或
(lbound+ubound+1)>>1或
3
(lbound+ubound) div 2 + 1
(lbound+ubound)/2+1
(5)
count:=count + len[i] div mid或
count=count+len[i]/mid或
3
inc(count, len[i] div mid)
count+=len[i]/mid
分值
1.
(1)
1
2
(2)
p>0或p<>0
p>0或p!=0或p
3
(3)
result * x mod m

noip2017提高组复赛解题报告

noip2017提高组复赛解题报告

noip2017提高组复赛解题报告定期推送帐号信息学新闻,竞赛自主招生,信息学专业知识,信息学疑难解答,融科教育信息学竞赛培训等诸多优质内容的微信平台,欢迎分享文章给你的朋友或者朋友圈!以下解题思路及代码未经官方评测,仅供参考,复赛成绩以官方(CCF)评测结果为准。

Day11.小凯的疑惑(math.cpp/c/pas)【问题描述】小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。

每种金币小凯都有无数个。

在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。

现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。

【输入格式】输入文件名为math.in。

输入数据仅一行,包含两个正整数 a 和b,它们之间用一个空格隔开,表示小凯手中金币的面值。

【输出格式】输出文件名为math.out。

输出文件仅一行,一个正整数N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。

【输入输出样例1】math.in3 7 math.out11【数据规模与约定】对于30%的数据: 1 ≤a,b ≤50。

对于60%的数据: 1 ≤a,b ≤10,000。

对于100%的数据:1 ≤a,b ≤1,000,000,000。

数学太差只找规律吧。

设:其中一个数为2则:2、3=>1;2、5=>3;2、7=>5;2、11=>9得:2、n=>n-2设:其中一个数为3则:3、5=>7;3、7=>11;3、11=>19;3、13=>23得:3、n=>2n-3设:其中一个数为5则:5、7=>23;5、11=>39;5、13=>47;5、17=>63得:5、n=>4n-5所以:m、n=>(m-1)n-m #includeusing namespace std;int main(){ long long a,m,n;scanf('%lld %lld',&m,&n); a=(m-1)*n-m; printf('%lld',a); return 0;} 2.时间复杂度(complexity.cpp/c/pas)【问题描述】小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是否正确。

NOIP2017普及组复赛-解题报告

NOIP2017普及组复赛-解题报告

NOIP2017普及组复赛-解题报告衢州市兴华中学By 冯明浩给出三个整十数A,B,C ,求A*20%+B*30%+C*50%的值模拟直接粗暴地输出A*0.2+B*0.3+C*0.5时间复杂度:O(1) 期望得分:100由于分数均为整十数,先将分数各除以10,再直接输A*2+B*3+C*5。

这样就避免了精度问题时间复杂度:O(1) 期望得分:100给出N 个数Ai ,再进行Q 次询问,找后缀为给定数Bi 的最小的Ai模拟将Ai 及Bi 都转化成字符串。

每次询问都对N 个数进行后缀比较,挑出个最小的时间复杂度:O(N*Q*len) 期望得分:80 对算法一的比较进行优化——构造出n 10,对于Ai ,直接Ai Mod 10len ,判断是否相等。

这样每次比较的时间复杂度优至O(1)同时先将Ai 排序,再每次从小到大查询,一旦找到就停时间复杂度:小于O(N*Q)(一般情况) 期望得分:100读入Ai 时进行处理,构造ans[x]数组,记录询问X 的最小值。

对于每个Ai ,依次取出其后1、2、3……len 位,修正其的最小值。

这样每次查询,就可以O (1)出结果了时间复杂度:O(N*len) 空间复杂度:O(max(Bi)) 期望得分:100给出一个N*N 的矩阵,其中部分格有颜色每次可以从一个格向上下左右四个方向移动一格(不能越出矩阵且满足条件),根据两个格子的颜色有不同的代价求从左上角走至右下角的最小代价最短路(动态规划)直接暴力地按照题意进行DFS时间复杂度:O(n n *2) 期望得分:30以左上角为起点,右下角为终点,刷四个方向的SPFA(也可预先对相邻格建好边,刷最短路SPFA 或DIJ 或进行记忆化DFS )时间复杂度:O(k*n*n) 期望得分:100给出N 个格子的位置Xi 与价值Pi ,从起点0往右跳跃,初始跳跃的距离只能为d同时可以花费金币来调整其跳跃距离,花了t 个金币时可跳跃的距离为max(1,d-t)~(d+k)每遍历一个格子就会获得其代价Pi ,求要获得总价值为K 所需最少的金币数二分、动态规划、单调序列(堆)从小到大枚举所需金币数,用O(N*N)的DP 进行check ,一旦发现可行就为答案时间复杂度:O(max(Ai)*N*N) 期望得分:20分析发现,枚举的金币数越多,跳跃范围越大,总价值一定越多——满足二分答案的单调性,于是将算法一的枚举答案变为二分枚举时间复杂度:O()max(2log Xi *N*N) 期望得分:50 分析一下DP 的转移方程:F[i]=max(F[j])+P[i](max(1,d-t)≤a[i]-a[j]≤d+k)就会发现DP 的j 这次循环是为了找F[1~i-1]中的最大值,自然而然就想到了用堆优化——堆中存放F[1~i-1],若堆顶距当前X[i]大于d+k ,就丢掉该元素(再也没用)否则若堆顶距当前X[i]小于max(1,d-t),就暂存在临时数组中,最后在当前解更新好后记得塞回去则F[i]=F[heap[1]]+P[i]时间复杂度:O()max(2log Xi *N*k*N 2log ) 期望得分:80 继续优化算法三的DP :那些离当前X[i]太近的实际上完全没有必要塞入堆中,那么再另开一个变量j 记录当前往堆中塞入的最后一个元素。

NOIP2017普及组初赛解析

NOIP2017普及组初赛解析

NOIP2017普及组初赛解析
纯原创+手打,求轻喷,如果觉得对你有帮助,点个赞吧,如果能打赏一下,你问我兹不兹瓷,我肯定是兹瓷的!
初步评价,整体来说,难度比2016增大了,倒并不是说题目思维难度加大很多,而是直接了当的题目少了一些,有10%左右分值的题目是有坑的,一不小心就错了。

基本结论:得分难度加大了,但是不能算是思维“非常难”级别。

如果心态平和,做完选择题之后,后面的题目都回归常规了,还是能够比较顺畅地解题,理论上应该得到比较理想的分数的。

今年无论是提高组还是普及组,数学味道都非常浓,计算机科学的基础学科是数学,所以我们要重视数学学科的学习,尤其是与计算机科学相关的组合数学、概率论、离散数学、数列等知识的学习,在OI中,这些知识与数奥的方向并不完全一致,所以对于普及组打基础的小朋友来说,没学过数奥的也不要方!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5
10 2
时间复杂度 ������(1) 空间复杂度 ������(1)
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 3 / 28
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
代码_算法一(Pascal)
1 var
29
ans := a[j];
30
if ans = '666666666' then writeln(-1) else writeln(ans);
31 end;
32 close(input);
33 close(output);
34 end.
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 7 / 28
算法一(100pts)
因为题目较为简单,所以直接将正解吧。 先读入元素集合和 ������ 个询问,对于每个询问 ������������, ������������,因为已经给定位数,且位 数不多,直接枚举(暴力)求出 ������������������1≤������≤������ ������������ (������������ ������������������ 10������������ = ������������) 即可。 时间复杂度 ������(������������) 空间复杂度 ������(1)
20
ans := a[j];
21
if ans = maxlongint then writeln(-1) else writeln(ans);
22 end;
23 close(input);
24 close(output);
25 end.
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 6 / 28
第四题 跳房子(jump)„„„„„„„„„„„„„„„„„„„„„„„16
参赛总结 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„28
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 2 / 28
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
13 reset(input);
14 assign(output, 'librarian.out');
15 rewrite(output);
16 read(n, q);
17 for i := 1 to n do
18 begin
19
read(x);
20
str(x, a[i]);
21 end;
22 for i := 1 to q do
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
NOIp2017 普及组
解题报告 & 参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 1 / 28
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
10
write(c div 2)
11 else
12
write(c div 2 + 50);
13 close(input);
14 close(output);
15 end.
代码_算法二(Pascal)(推荐此算法)
1 var 2 a, b, c : longint; 3 begin 4 assign(input, 'score.in'); 5 reset(input); 6 assign(output, 'score.out'); 7 rewrite(output); 8 readln(a, b, c); 9 write(trunc(a * 0.2 + b * 0.3 + c * 0.5)); //也可以写:0:0 10 close(input); 11 close(output); 12 end.
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
代码_算法一(Pascal)(推荐此算法)
1 var
2 n, q, i, j, m, x, ans : longint;
3 a : array[0..1001] of longint;
4 p : array[0..8] of longint;
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
第三题 棋盘
(chess.cpp/c/pas)
Time Limit: 1sec Memory Limit: 256MB
题意
给定一个只有两种颜色的 ������ × ������ 的矩阵,有 ������ 个格子有颜色,颜色已给定。 请你求出遵守以下规则从矩阵左上角 (1,1) 到达右下角 (������, ������) 的最少需要花的 金币。
2
对于题目中另外 30% 的数据,可以直接输出 50 + ������ 的值。
2
时间复杂度 ������(1) 空间复杂度 ������(1)
算法二(100pts)
正解。读入后直接输出 0.2������ + 0.3������ + 0.5������ 即可,C++选手需要注意精度问题。
也可以写 ������ + 3 · ������ + ������ 的值。
算法二(100pts)
还是先读入。接下来对于每个询问可以把 ������������ 转化为字符串,然后枚举(暴力) 查找匹配,找出符合条件的最小值。 时间复杂度 ������(������������) 空间复杂度 ������(1)
NOIp2017 普及组解题报告&参赛总结
By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓 5 / 28
NOIp2017 普及组解题报告&参赛总结 By 浙江省诸暨市浣江教育集团浣江初中 孟煜皓
代码_算法二(Pascal)
1 var
2 n, q, i, j, m, x : longint;
3 a : array[0..1001] of string;
4 s, ans : string;
5 function minn(a, b : string) : boolean;
6 begin
7 if length(a) < length(b) then exit(true);
8 if length(b) < length(a) then exit(false);
9 exit(a <= b);
10 end;
11 begin
12 assign(input, 'librarian.in');
12 read(n, q);
13 for i := 1 to n do read(a[i]);
14 for i := 1 to q do
15 begin
16
read(m, x);
17
ans := maxlongint;
18
for j := 1 to n do
19
if (a[j] >= x) and (a[j] mod p[m] = x) and (a[j] < ans) then
目录 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„2
第一题 成绩(score)„„„„„„„„„„„„„„„„„„„„„„„„3
第二题 图书管理员(librarian)„„„„„„„„„„„„„„„„„„„5
第三题 棋盘(chess)„„„„„„„„„„„„„„„„„„„„„„„„8
注意:
1. 笔者水平不高,可能有表达不严谨或疏漏。 2. 笔者初一蒟蒻,代码风格极为丑陋,且比较繁琐,或许有改进的地方。 3. 笔者数学不好,有些公式的表达或许有些问题,请见谅。 4. 限于篇幅原因,有些算法写的比较粗略,请见谅。 5. 有些语言、变量名的变化会在具体题目中说明,请注意。
目录:
标题 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1
5 begin
6 assign(input, 'librarian.in');
7 reset(input);
8 assign(output, 'librarian.out');
9 rewrite(output);
10 p[0] := 1;
11 for i := 1 to 8 do p[i] := p[i - 1] * 10; /, c : longint;
3 begin
4 assign(input, 'score.in');
5 reset(input);
6 assign(output, 'score.out');
7 rewrite(output);
8 readln(a, b, c);
9 if a = 0 then
第一题 成绩 (score.cpp/c/pas)
Time Limit: 1sec Memory Limit: 256MB
题意
给定 ������, ������, ������,求 ������ × 20% + ������ × 30% + ������ × 50% 的值。
相关文档
最新文档