版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、NOIP2008普及组复赛解题报告一、ISBN号码基础字符串处理题,心细一点的基本都能得满分。参考程序:program isbn;const inp='isbn.in' oup='isbn.out'var i,j,k,ans:longint; s:string; ch:char;procedure flink; begin assign(input,inp); reset(input); assign(output,oup); rewrite(output); end;procedure fclose; begin close(input); close(out
2、put); end;begin flink; readln(s);/ 输入字符串 j:=0; i:=1; ans:=0; while j<9 do begin if si in '0'.'9' then/如果是数字,那么累加到ans中,共9个数字 begin inc(j); inc(ans,(ord(si)-ord('0')*j); end; inc(i); end; ans:=ans mod 11;计算识别码 if ans=10 then ch:='X' else ch:=chr(ord('0')+ans)
3、;/把识别码转换成字符,方便输出 if slength(s)=ch then write('Right') else write(copy(s,1,12)+ch);/输出正确的识别码 fclose;end.二、排座椅用的是赛前集训时提到的贪心,当时说某些题目用贪心可以得部分分,但是本题贪心可以得满分的。当然本题的贪心需要预处理下,开2个一维数组,rowi录如果在第i行加通道,可以分割多少对调皮学生,coli记录如果在第j列加通道,可以分割多少对调皮学生,最后贪心法输出分割学生最多的前K行和前L列。参考程序:program seat;const inp='seat.in&
4、#39; oup='seat.out'var flag,m,n,k,l,d,i,j,x,y,x1,y1:longint; tmp,col,row:array1.1000 of longint; s,s1:ansistring;procedure flink; begin assign(input,inp); reset(input); assign(output,oup); rewrite(output); end;procedure fclose; begin close(input); close(output); end;function min(a,b:longint)
5、:longint; begin if a<b then exit(a); exit(b); end;procedure qsort(m,n:Longint);/快排 var i,j,k,t:longint; begin i:=m; j:=n; k:=tmp(i+j) shr 1; repeat while tmpi>k do inc(i); while tmpj<k do dec(j); if i<=j then begin t:=tmpi; tmpi:=tmpj; tmpj:=t; inc(I); dec(J); end; until i>j; if m<
6、j then qsort(m,j); if I<n then qsort(i,n); end;begin flink; readln(m,n,k,L,d); fillchar(row,sizeof(row),0); fillchar(col,sizeof(col),0); for i:= 1 to d do /统计在每行、每列添加通道可以分割的学生数 begin readln(x,y,x1,y1); if (x=x1) then inc(colmin(y,y1) else inc(rowmin(x,x1); end; j:=0; for i:= 1 to m do /把能没个行通道分割的
7、学生数加入tmp数组,准备排序 begin if rowi>0 then begin inc(j); tmpj:=rowi; end; end; qsort(1,j);/对tmp数组排序 flag:=tmpk;/flag为前K项的最小值 i:=1; j:=0; while (i<=n) and (j<k) do begin if rowi>=flag then /如果该行能分割的人数不少于flag,说明此处可以添加通道 begin write(i); inc(j); if j<>k then write(' '); end; inc(i);
8、end; writeln;/下面是求列通道,思想同上 j:=0; for i:= 1 to n do begin if coli>0 then begin inc(j); tmpj:=coli; end; end; qsort(1,j); flag:=tmpL; i:=1; j:=0; while (i<=m) and (j<L) do begin if coli>=flag then begin write(i); inc(j); if j<>L then write(' '); end; inc(i); end; fclose;end.三
9、、传球游戏直接dp,似乎说递推更确切点。f(i,k)表示经过k次传到编号为i的人手中的方案数。那么可以推出下面的方程:f(i,k)=f(i-1,k-1)+f(i+1,k-1) (i=1或n时,需单独处理)边界条件:f(1,0)=1;结果在f(1,m)中参考程序:program ball;const inp='ball.in' oup='ball.out'var i,j,k,n,m:longint; f:array0.30,0.30 of longint;procedure flink; begin assign(input,inp); reset(input);
10、 assign(output,oup); rewrite(output); end;procedure fclose; begin close(input); close(output); end;begin flink; readln(n,m); fillchar(f,sizeof(f),0); f1,0:=1; for k:=1 to m do/注意此处2个循环的次序 begin f1,k:=f2,k-1+fn,k-1; for i:= 2 to n-1 do fi,k:=fi-1,k-1+fi+1,k-1; fn,k:=fn-1,k-1+f1,k-1; end; write(f1,m);
11、 fclose;end.四、立体图Pku原题,编号2330算不上难题,但是比较麻烦,细心点就ok了。先计算好画布的大小,再写一个根据左下角坐标绘制一个单位立方体的子程序。然后遵循下面法则,不停绘制若干个立方体。(此处能体现出分割程序的伟大)因为要不停的覆盖,所以要遵循“视觉法则”:1. 先绘里层再绘外层2. 先绘底层再绘上层3. 先回左边再绘右边参考程序:program drawi
12、ng;const inp='drawing.in' oup='drawing.out'var m,n,i,j,k,x,y,h,tmp,maxx,maxy:longint; map:array1.1000,1.1000 of char;/画布 a:array1.50,1.50 of integer;/记录输入的矩阵procedure flink; begin assign(input,inp); reset(input); assign(output,oup); rewrite(output); end;procedure fclose; begin close(
13、input); close(output); end;procedure print;/输出画布 var i,j:longint; begin for i:= 1 to maxx do begin for j:= 1 to maxy do write(mapi,j); if i<>maxx then writeln; end; end;procedure draw(x,y:longint);/在画布(map数组)上绘制左下角坐标为(x,y)的一个单位立方体 begin mapx,y:='+'mapx,y+1:='-' mapx,y+2:='-
14、'mapx,y+3:='-'mapx,y+4:='+' dec(x); mapx,y:='|'mapx,y+1:=' ' mapx,y+2:=' 'mapx,y+3:=' 'mapx,y+4:='|' mapx,y+5:='/' dec(x); mapx,y:='|'mapx,y+1:=' ' mapx,y+2:=' 'mapx,y+3:=' 'mapx,y+4:='|' mapx
15、,y+5:=' 'mapx,y+6:='+' dec(x); mapx,y:='+'mapx,y+1:='-' mapx,y+2:='-'mapx,y+3:='-'mapx,y+4:='+' mapx,y+5:=' 'mapx,y+6:='|' dec(x); inc(y); mapx,y:='/'mapx,y+1:=' ' mapx,y+2:=' 'mapx,y+3:=' 'mapx,y
16、+4:='/' mapx,y+5:='|' dec(x);inc(y); mapx,y:='+'mapx,y+1:='-' mapx,y+2:='-'mapx,y+3:='-'mapx,y+4:='+' end;begin flink; for i:= 1 to 1000 do for j:= 1 to 1000 do mapi,j:='.' /初始化画布 readln(m,n); /计算画布大小maxx * maxy maxy:=n*4+1+m*2; maxx:=0; for i:= 1 to m do begin tmp:=0; for j:= 1 to n do begin read(ai,j); if ai,j>tmp then tmp:=ai,j; end; tmp:=tmp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 起重吊装安全督查课件
- 职业健康归属感对医疗员工组织承诺的正向影响
- 连云港2025年江苏连云港市教育局直属学校招聘编制内教师32人笔试历年参考题库附带答案详解
- 盐城2025年江苏盐城射阳县招聘政府购买服务工作人员157人笔试历年参考题库附带答案详解
- 温州浙江温州市公安局招聘年薪制警务辅助人员5人笔试历年参考题库附带答案详解
- 泸州四川泸州合江县乡镇事业单位从“大学生志愿服务西部”高校毕业生中招聘笔试历年参考题库附带答案详解
- 江门广东江门市公安局蓬江分局蓬江分局招聘铁骑辅警人员笔试历年参考题库附带答案详解
- 常德2025年湖南常德市澧县部分事业单位招聘8人笔试历年参考题库附带答案详解
- 安徽2025年安徽医科大学招聘管理岗和专业技术辅助岗(第二批)笔试历年参考题库附带答案详解
- 台州浙江台州市椒江区市场开发服务中心招聘9人笔试历年参考题库附带答案详解
- 2026届南通市高二数学第一学期期末统考试题含解析
- 写字楼保洁培训课件
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库有完整答案详解
- 计量宣贯培训制度
- 运输人员教育培训制度
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库有答案详解
- 升降货梯买卖安装与使用说明书合同
- 河南豫能控股股份有限公司及所管企业2026届校园招聘127人考试备考题库及答案解析
- 房地产公司2025年度总结暨2026战略规划
- 物业管家客服培训课件
- 虚假贸易十不准培训课件
评论
0/150
提交评论