140 条题解
-
0fp_ybc LV 10 @ 2009-09-05 11:04:12
向上的三角形的顶点所在列要是偶数
向下的三角形的顶点所在列要是奇数
数组要开到201以上 -
02009-09-04 23:08:28@
program b9_4;
var dp:array[0..101,0..221]of longint;
tab:array[0..101,0..221]of char;
i,j,k,n,m,ans:longint;
ch:char;
function min(a,b:longint):longint;
begin if a>b then exit(b)else exit(a); end;
beginreadln(n);
for i:=1 to n do
begin
for j:=1 to 2*n-i do
begin
read(tab);
if (tab='-') then
dp:=min(min(dp,dp),dp)+1
else
dp:=0;
if (dp>ans)and((j+i) mod 2 =0) then ans:=dp;
end;
readln;
end;fillchar(dp,sizeof(dp),0);
for i:=n downto 1 do
begin
for j:=1 to 2*n-i do
begin
if tab='-'then
dp:=min(min(dp,dp),dp)+1
else
dp:=0;
if (dp>ans)and((j+i) mod 2=1) then ans:=dp;
end;
end;
writeln(ans*ans);end.
程序依旧很短
-
02009-09-03 19:55:29@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms今天人品爆发。。
-
02009-08-20 13:49:38@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案错误... ├ 标准行输出
├ 错误行输出├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms -
02009-08-17 12:24:12@
var n,i,j,k,min,max:integer;
a:array[-100..200,-100..200]of char;
b:array[-100..200,-100..200]of integer;
kg:char;begin
readln(n);
for i:=1 to n do
begin
for j:=1 to i-1 do read(kg);
for j:=1 to (n-i+1)*2-1 do read(a);
readln;
end;
for i:=1 to n do
for k:=1 to n do
begin
j:=k*2-1;
if a='-' then
if a='-' then
begin
min:=b;
if bmax then max:=b
end;
writeln(sqr(max));
end. -
02009-08-17 08:47:55@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms//---|---|---|---|---|--
很好一次秒杀
方程很好想跟盖房子差不多
就是要考虑顶点...楼下有人说只考虑正面的其实是不对的...过了只因为数据弱
比如这个数据
0001100
901110
99000
99909=' '
0='#'
1='-'只考虑正面则输出1*1
其实正解是2*2所以正确的是两个方向都要考虑
[
for i:=1 to n do
begin
k:=n+1-i;
for j:=1 to n*2-1 do
begin
if f>0
then f:=min(min(f,f),f)+1;
if m[k,j]>0
then m[k,j]:=min(min(m[k+1,j],m[k+1,j-1]),m[k+1,j+1])+1;
if (f>max) and (odd(j+i-1)) then max:=f;
if (m[k,j]>max) and (odd(j+k)) then max:=m[k,j];
end;
end;
] -
02009-08-15 16:18:15@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
...沮丧
三次信心满满地提交,三次错愕地看着蹦出来的绿色字体
第一次的信心满满来自认为题目简单
第二次的信心满满来自发现了一个大错误,心里还纳闷咋这样也能过九个点
第三次的信心满满来自前两次的信心满满
。。。第四次胆战心惊却pass了。。。肯定数据哪里有耍阴的。。。 -
02009-08-14 22:59:44@
- -...一开始ans的求法写错...天呐
看了题解才知道为什么只用判断朝下的...
害我写了个巨烦的dp...---|---|---|---|---|---|---|---|---|---|---|---|---|--
考虑朝上的不会错,只不过很烦...
- -...一开始ans的求法写错...天呐
-
02009-08-14 22:55:21@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms注意判断顶点
---|---|---|---|---|---|---|---|---|---|---|-晒晒---|---|---|---|---|---|---|---|---|---|---|-
program v1063;
var f:array[0..101,0..202] of longint;
i,j,n,max:longint;
x:string;
function min(a,b,c:longint):longint;
begin
min:=a;
if b -
02009-08-05 02:53:14@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 9ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:9ms
网速真慢,足足等了2分钟。
换来一次AC也值得吧。
就是很简单的DP,关键就是用字符串操作把'#'和'-'换成方便操作的数组(布尔比较好)。而且为了之后的操作方便,必须把空格的位置也留在数组里。这样就会有一个比较直观的上下三角形之间的关系。再就是操作时一定要仔细地算好位置和长度。边算边判断答案会更好。哎呀,编写代码时无意地发现的“阴险”差点忘记说了。就是楼上人所说的只有奇数位的能算,偶数位的不能算。
还是附上代码吧(我把数据倒着读入了,个人习惯):
var
s:array [1..100] of string;
f:array [1..100,1..100,1..200] of boolean;
n,i,j,k,l,ans:integer;
begin
readln(n);
ans:=0;
for i:=1 to n do readln(s[n+1-i]);
for i:=1 to n do while s[i][1]=' ' do delete(s[i],1,1);
for i:=1 to n do for j:=1 to i*2-1 do
if s[i][j]='-'
then begin
f[1,i,n-i+j]:=true;
ans:=1;
end
else f[1,i,n-i+j]:=false;
for i:=2 to n do begin
for j:=1 to n+1-i do begin
for k:=1 to j do begin
f:=f;for l:=1 to i*2-1 do begin
f:=f and f[1,i+j-1,n-j+k*2-1-i+l];
end;if f then ans:=i;
end;
end;
end;
writeln(ans*ans);
end. -
02009-08-03 15:08:00@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms呜呜~~~~(>_
-
02009-08-03 11:21:27@
“表演者排成n排,构成一个向前的正三角形(在屏幕上,即向下)。”
对于为什么只考虑向下的三角形,本菜的解释是他们是要进行表演的,必须面向观众!
草根解释……
判断奇偶果然十分重要,虽然不判断也有90分…… -
02009-07-31 13:44:57@
为什么考虑了朝上的正三角形就会错,不考虑就AC
-
02009-07-27 21:28:40@
数据貌似没错额,n
-
02009-07-27 20:20:41@
一次AC,解法和P1057盖房子差不多,只是要注意判断下方向:
var n,i,j,k,answer:integer;
s:string;
map:array [1..100,1..100] of boolean;
f:array [0..102,0..102] of integer;function min(a,b:integer):integer;
begin
if aanswer then
answer:=f;
end;
write(sqr(answer));
end. -
02009-07-22 11:42:14@
注意奇偶性判断。。
不判断的话第4个点过不了。 -
02009-07-20 22:54:33@
第一次.考虑错了,写了个n方的交上去,还心想为什么n最大只有100。50分。
第二次.没有判顶点是否是白色的。80分
第三次.没有判顶点方向。90分
第四次……终于AC了……纠结ing…… -
02009-07-13 16:10:34@
program p1063;
var
f:array[0..1000,0..1000] of longint;
a:array[0..1000,0..1000] of char;
i,j,k,m,n,l,r,max:longint;
c:char;
begin
readln(n);
for i:=1 to n do begin
for k:=1 to i-1 do read(c);
for j:=1 to 2*(n-i+1) do read(a);
readln;
end;
for i:=1 to n do begin
for j:=1 to 2*(n-i+1) do begin
if odd(j) and (a='-') then f:=1;
if (odd(j)) and (a='-') and (a='-')
then if fmax then max:=f;
end;
end;
writeln(sqr(max));end.
-
02009-07-13 16:11:07@
var a:array [0..1000,0..1000] of char;
i,j,k,l,m,n,b:longint;
ch:char;
f:array [0..1000,0..1000] of longint;
function min(a,b:longint):longint;
begin
min:=a;
if bb then b:=f;
end;
writeln(b*b);
end. -
02009-07-11 10:29:04@
终于AC...貌似数据还是有点问题...
考虑倒三角f:=min(f,f)+1(a,a='-')
广东省N年前的省赛题....