tyvj 衡水中学60周年赛 解题报告

来源:互联网 发布:cpu满载测试软件 编辑:程序博客网 时间:2024/04/27 14:09
 

刷漆运动开始……
莘元馆有m+1行,n+1列的座椅,编号分别为0~m,0~n,第0行的座椅已经刷成了红色,第0列的座椅(除位置为(0,0)的刷成了红色)已经刷成了绿色,其他座椅均为白色,现在,OI小组需要粉刷所有那些白色的座椅。
校长的要求是,对于每一个座椅(i,j),它必须与(i-1,j)座椅或(i,j-1)座椅同色。
魂之挽歌想知道,将每一个座椅全都粉刷,一共有多少种方案?

输入
一行,两个正整数m,n(0 < m,n<=2000)
输出
仅一个正整数,表示方案数(由于答案较大,只需输出它mod 20110926的值即可)
样例输入
1 1
样例输出
2
提示
就一个座椅,不是红的就是绿的(红配绿……)

 

思路:略。

得分:100

ac程序:

 

var a:array[0..2000,0..2000] of longint;n,m,i,j,k,sum:longint;begin {assign(input,'chair.in'); assign(output,'chair.out'); reset(input); rewrite(output);} readln(n,m); for i:=1 to n do  a[i,0]:=1; for i:=1 to m do  a[0,i]:=1; a[0,0]:=1; for i:=1 to n do  for j:=1 to m do   a[i,j]:=(a[i-1,j]+a[i,j-1]) mod 20110926; writeln(a[n,m]); {close(input); close(output);}end.


提交地址:http://hzoi.openjudge.cn/codewaysky/1006/

 

衡水中学马上就要60周年校庆了,衡中的OI小组都很高兴
于是,他们想出一道水题给大家送分
衡中OI小组想让你计算一下,从y年m月d日到衡水中学的k周年校庆有多少天?
注:衡水中学建校于1951-9-26,1周年校庆是在1952-9-26 输入 第一行三个整数y,m,d(1951<=y<=2011,1<=m<=12,1<=d<=31,保证日期合法)
第二行一个整数k(0输出 一个正整数,表示还有多少天。(如果k周年校庆在y年m月d日已经过了,那么就输出impossible)

样例输入 2011 6 18 60

样例输出 100

 

思路:直接模拟

得分:100分

ac程序:

const dx:array[1..12] of longint=((31),(28),(31),(30),(31),(30),(31),(31),(30),(31),(30),(31));var y,m,d,i,j,k,l,now,sum,day:longint;fuck:int64;function run(x:longint):boolean;begin if ((x mod 4=0) and (x mod 100<>0)) or (x mod 400=0) then  exit(true) else exit(false);end;procedure print(i,j,l:longint);begin if (i=(1951+k)) and (j=9) and (l=26) then  begin writeln(sum);   close(input); close(output); halt;  end;end;begin {assign(input,'day.in'); assign(output,'day.out'); reset(input); rewrite(output);} readln(y,m,d); readln(k); {for i:=1 to k do  if run(y+i) then inc(now,366)  else inc(now,365);} {fuck:=(1951+k)*10000+9*100+26;} for i:=y to 1951+k do  begin  for j:=m to 12 do   begin   day:=dx[j];   if run(i) and (j=2) then day:=day+1;    for l:=d to day do     begin      print(i,j,l); inc(sum);     end;    d:=1;   end;   m:=1;  end; writeln('impossible'); {close(input); close(output);}end.


提交地址:

http://hzoi.openjudge.cn/codewaysky/1004/

为了校庆的新面貌,校长大人决定把学校的大甬路铺上沥青(原来是石板的……)。
这条路被分为N个区域,每次,校长会对工人们发出命令:
(1)把l区域到r区域的路铺好(如果中间某区域已经铺好,就不再铺了)
(2)由于可能有猪仙那样的同学把鞋粘在上面,校长老远一看也不知道是哪个区域,于是就会让工人把l区域到r区域的路全部拆掉(如果中间某区域还没铺好,就不拆了)
在一开始,整条路都还没铺上沥青。
校长在发出了M条命令之后,想知道有多少个区域的路是铺好了的。 输入 第一行,两个数N,M
接下来M行,每行三个数k,l,r,k=1或2,k=1表示把l区域到r区域的路铺上,k=2则表示把l区域到r区域的路拆掉 输出 一个数,即有多少个区域的路是铺好了的

样例输入 5 3 1 1 31 3 52 2 4

样例输出 2

 

思路:线段树(表示不会)

得分:模拟得30分

ac程序:无

提交地址:http://hzoi.openjudge.cn/codewaysky/1007/

 

maxingc是不会让魂之挽歌赴汤蹈火的……
衡中和滏阳同在一个平面坐标系上,所有的路都是与坐标轴平行的。
在这个坐标系上,有N个路口,在这些路口上(且仅在这些路口上)可以拐弯,即由平行于一个坐标轴走到平行于另一个坐标轴走。
现在maxingc想让魂之挽歌算一下,从衡中到滏阳,至少要拐几个弯? 输入 第一行,一个数N(N<=100000)
接下来有N+2行,每行有一对坐标,第一行是衡中的坐标,最后一行是滏阳的坐标,中间N行是各个路口的坐标
保证所有坐标绝对值<=2*10^9 输出 一个数,即至少拐多少个弯(如果不能到达,就输出NO)

样例输入 2 0 01 01 1-1 1

样例输出 2

 

思路:bfs

得分:70分(修改后90分,最后一点tle)

90分程序:

var x,y,dx,dy,ans:array[0..100000] of longint;v:array[0..100000] of boolean;n,i,j,k,nowx,nowy,ex,ey,sum:longint;procedure f;var t,w,i,tx,ty:longint;begin t:=0; w:=1; dx[1]:=nowx; dy[1]:=nowy; {v[1]:=true;} while t<w do  begin   inc(t);   tx:=dx[t]; ty:=dy[t];   for i:=1 to n do    if not v[i] then     if (x[i]<>tx) or (y[i]<>ty) then      if (x[i]=tx) or (y[i]=ty) then       begin        inc(w); dx[w]:=x[i]; dy[w]:=y[i];        ans[w]:=ans[t]+1;        v[i]:=true;        if (dx[w]=ex) or (dy[w]=ey) then         begin sum:=ans[w]; exit; end;       end;  end;end;begin {assign(input,'way.in'); assign(output,'way.out'); reset(input); rewrite(output);} readln(n); readln(nowx,nowy); for i:=1 to n do  readln(x[i],y[i]); readln(ex,ey); if (nowx=ex) or (nowy=ey) then writeln(0) else begin f; if sum=0 then writeln('NO') else writeln(sum); end; {close(input); close(output);}end.


提交地址:http://hzoi.openjudge.cn/codewaysky/1005/

原创粉丝点击