2016.06.11下午【2016新初一 】普及组模拟题解
来源:互联网 发布:java 读取csv 编辑:程序博客网 时间:2024/05/05 13:18
题目网址:http://blog.csdn.net/fengyingjie2/article/details/51711179
----------------------------------------------------------------------------------------------------------
总结:
这次比赛总体来说考得挺好,题目也挺简单,第二题没看懂题目所以没做,不然有可能AK了!
T1:
这道题看起来我有点懵逼,他说除掉多余的0,我刚开始以为是0就得除掉,于是差点错了。其实这个就是高精度,普普通通的高精度乘法,找好位置加就好。我的高精度可能和书本不同,可能会更好理解。贴代码:
<span style="font-size:14px;">var s1,s2:string; num,a,b:array[0..90] of longint; i,j,len1,len2:longint;begin assign(input,'bullmath.in');reset(input); assign(output,'bullmath.out');rewrite(output); readln(s1); len1:=length(s1); readln(s2); len2:=length(s2); for i:=1 to len1 do a[len1-i+1]:=ord(s1[i])-48; for i:=1 to length(s2) do b[len2-i+1]:=ord(s2[i])-48;//输入处理 for i:=1 to len1 do for j:=1 to len2 do inc(num[i+j-1],a[i]*b[j]);//累加每两个在这个位置相乘的数, for i:=1 to len1+len2-1 do begin inc(num[i+1],num[i] div 10);//累加给上一位 num[i]:=num[i] mod 10;//剩下个位 end; if num[len1+len2]>0 then write(num[len1+len2]);//特殊情况判断 for i:=len1+len2-1 downto 1 do write(num[i]);//输出 close(input);close(output);end.</span>T2:
第二题有点难度。我比赛看不懂题目,其实题目也很好理解,就是找通过每块板的距离来找板与板之间最短距离。于是乎,我们可以枚举最短距离。不过最短距离的最大值为a[n]-a[1],就是1,000,000,000,还没有加判断,绝对超时。所以,我们就用二分来判断。效率为log²N,节省了非常多的时间。上代码:
<span style="font-size:14px;">var l,r,i,mid,n,m,min:longint; a:array[0..100000] of longint;procedure q(l,r:longint);var i,j,m,p:longint;begin i:=l; j:=r; m:=a[(l+r) div 2]; repeat while a[i]<m do inc(i); while a[j]>m do dec(j); if i<=j then begin p:=a[i]; a[i]:=a[j]; a[j]:=p; inc(i); dec(j); end; until i>j; if l<j then q(l,j); if i<r then q(i,r);end;function pd(xx:longint):longint;//这个判断就是用来判断按照二分的最短距离能够用多少块板var i,ans,num:longint;begin ans:=1; num:=a[1];//第一个为第一块板,ans=1同,就是第一块板已经算选了1个。 for i:=1 to n do if a[i]-num>=xx then//两两的差大于等于二分的距离就说明可以在下一个地方加板。 begin inc(ans);//加板 num:=a[i];//记录当前板的位置 if ans=m then exit(ans);//如果符合条件不需要枚举,直接退出 end; exit(0);end;begin assign(input,'aggr.in');reset(input); assign(output,'aggr.out');rewrite(output); readln(n,m); for i:=1 to n do read(a[i]); q(1,n);//先排序,不是有序的就不可以算出来两两之间的距离了。</span>
<span style="font-size:14px;"> l:=0;//可以省略 r:=(a[n]-a[1]) div m+1; while l<=r do begin mid:=(l+r) div 2; if pd(mid)=m then begin min:=mid; l:=mid+1; end else r:=mid-1; end; writeln(min); close(input);close(output);end.</span>T3:第三题太水了,把处理过的赋值过的位置变成反之的符号就可以了,dfs or bfs。
<span style="font-size:14px;">var n,m,i,j,k,ans,head,tail,x,y:longint; a:array[1..100,1..100] of char; dx:array[1..8] of longint=(-1,-1,0,1,1,1,0,-1); dy:array[1..8] of longint=(0,1,1,1,0,-1,-1,-1); d:array[1..15000,1..2] of longint;begin assign(input,'lkcount.in');reset(input); assign(output,'lkcount.out');rewrite(output); readln(n,m); for i:=1 to n do begin for j:=1 to m do read(a[i,j]); readln; end; for i:=1 to n do for j:=1 to m do if a[i,j]='W' then begin inc(ans); head:=0; tail:=1; d[1,1]:=i; d[1,2]:=j; while head<>taIL DO begin inc(head); for k:=1 to 8 do begin x:=d[head,1]+dx[k]; y:=d[head,2]+dy[k]; if (x>0)and(y>0)and(x<=n)and(y<=m)and(a[x,y]='W') then begin inc(tail); d[tail,1]:=x; d[tail,2]:=y; a[x,y]:='.'; end; end; end; end; writeln(ans); close(input);close(output);end.</span>T4:第四题我在考试随便打了个DP居然对了!!!欢呼~╰(*°▽°*)╯喜悦~。这个目测就是搜索,不过我搜索打不对。就是有2种方案,走还是接,然后计算最大值。不过正解还是DP。同样也是2种情况,走还是接。f[i,j]表示第I分钟移动了J次接到的最大苹果数。动态转移方程为:f[i,j]:=max(f[i-1,j]+k1,f[i-1,j-1]+k2);k1,k2表示可不可以接到苹果,接到为1,反之为0。
<span style="font-size:14px;">var n,m,i,j,k1,k2,now,max1:longint; f:array[0..1000,0..30] of longint; a:arrAY[0..1000] of longint;function min(a,b:longint):longint;begin if a<b then exit(a) else exit(b);end;function max(a,b:longint):longint;begin if a>b then exit(a) else exit(b);end;begin assign(input,'bcatch.in');reset(input); assign(output,'bcatch.out');rewrite(output); readln(n,m); for i:=1 to n do begin readln(a[i]); if a[i]=1 then f[i,0]:=f[i-1,0]+1 else f[i,0]:=f[i-1,0]; end; for i:=1 to n do for j:=1 to min(m,i) do begin k1:=0; k2:=0; if odd(j) then now:=2 else now:=1; if now=a[i] then k1:=1 else k2:=1; f[i,j]:=max(f[i-1,j]+k1,f[i-1,j-1]+k2); end; writeln(f[n,m]); close(input);close(output);end.</span>
0 0
- 2016.06.11下午【2016新初一 】普及组模拟题解
- 2016.06.11下午【2016新初一 】普及组模拟题目
- 2016.05.14下午【2016纪念中学新初一】基础赛
- 2016.12.30【初中部 】普及组模拟赛C组题解
- 2017.08.06【NOIP 普及组】模拟赛C组题解
- 2016.07.18【初中部 NOIP普及组 】模拟赛题解
- 2016.08.18【初中部 NOIP普及组 】模拟赛题解
- 2016.08.18【初中部 NOIP普及组 】模拟赛题解
- 2016.08.19【初中部 NOIP普及组 】模拟赛题解
- 2016.08.19上午【初中部 NOIP普及组 】模拟赛题解
- 2016.08.19上午【初中部 NOIP普及组 】模拟赛题解
- 2016.09.10【初中部 NOIP普及组 】模拟赛题解
- 2016.09.10【初中部 NOIP普及组 】模拟赛题解
- 2016.10.05【初中部 NOIP普及组 】模拟赛题解
- NOIP2016 普及组南海区模拟题解题报告
- 普及组模拟题1、4题题解与反思
- NOIP-2016-普及组 复赛题解
- [NHZXOI2017]2016NOIP普及组复赛题解
- 【JZOJ 4624】字符串匹配
- 过程及程序块的技巧
- 前淘宝技术专家谈12306:这个网站很神奇
- python 如何优雅地退出子进程
- 如何在linux和windows下使用版本管理工具git 详解
- 2016.06.11下午【2016新初一 】普及组模拟题解
- Cookie登录
- NodeJS学习系列课程笔记(NodeJs简介)
- 【C-step by step③】-二叉树
- 【刷题之路】二进制中1的个数
- pom.xml内容没有错,但一直报错红叉 解决办法
- C++11:lambda表达式、bind函数、function类型
- CSS应用:动画
- 逆序链表查询