P党二维前缀和+二维DP 蜜汁88分,最后一个点没过

P1736 创意吃鱼法

Cubeneo @ 2019-08-09 13:56:38

最后一个正确答案994

但我看了输入怎么都觉得是995

但是我的输出是94* (大概,最后一位不确定,本地测评卡死了按WA提示猜的)

Uses Math ;

Var F, E : Array [0..2500,0..2500] of Longint ;
Var Q : Array [0..2500,0..2500] of Longint ;
Var n, m, i, j : Longint ; Ans : Longint = 0 ;

Function slip(i,j,a : Longint):Longint;

Begin
  if a>0 then Begin inc(j,a-1); a := -a End;
  slip := Q[i,j] - Q[i+a,j] - Q[i,j+a] + Q[i+a,j+a] ;
End;

Begin
  Readln(n, m);
  FillChar(Q,sizeof(Q),0);
  FillChar(E,sizeof(E),0);
  FillChar(F,sizeof(F),0);
  For i := 1 to n do 
    For j := 1 to m do 
      Begin
        Read(E[i,j]);
        F[i,j] := E[i,j] ;
        Q[i,j] := Q[i-1,j] + Q[i,j-1] + E[i,j] - Q[i-1,j-1] ;
      End;
  For i := 1 to n do 
    For j := 1 to m do 
      if E[i,j]=1 
        then Begin
               if E[i-1,j-1]=1 then F[i,j] := ifthen(slip(i,j,-F[i-1,j-1]-1)=F[i-1,j-1]+1,F[i-1,j-1]+1,F[i,j]);
               if E[i-1,j+1]=1 then F[i,j] := ifthen(slip(i,j, F[i-1,j+1]+1)=F[i-1,j+1]+1,F[i-1,j+1]+1,F[i,j]);
               Ans := max(F[i,j],Ans);
             End;
  writeln(Ans);
End.

哪位Dalao帮忙DEBUG一下

然鹅本蒟蒻能把蓝题切掉11/12已经很满足了


by Cubeneo @ 2019-08-09 14:05:27

说真的这提数据可能有点问题

3 3

1 0 0

0 1 0

1 0 0

这组数据的正确答案应该是2,但我的程序出来是3。DEBUG之后的代码:

Uses Math ;

Var F : Array [0..2500,0..2500] of Record left,right : Longint End ;
Var Q, E : Array [0..2500,0..2500] of Longint ;
Var n, m, i, j : Longint ; Ans : Longint = 0 ;

Function slip(i,j,a : Longint):Longint;

Begin
  if a>0 then Begin inc(j,a-1); a := -a End;
  slip := Q[i,j] - Q[i+a,j] - Q[i,j+a] + Q[i+a,j+a] ;
End;

Begin
  Readln(n, m);
  FillChar(Q,sizeof(Q),0);
  FillChar(E,sizeof(E),0);
  FillChar(F,sizeof(F),0);
  For i := 1 to n do 
    For j := 1 to m do 
      Begin
        Read(E[i,j]);
        F[i,j].left  := E[i,j] ;
        F[i,j].right := E[i,j] ;
        Q[i,j] := Q[i-1,j] + Q[i,j-1] + E[i,j] - Q[i-1,j-1] ;
      End;
  For i := 1 to n do 
    For j := 1 to m do 
      if E[i,j]=1 
        then Begin
               if E[i-1,j-1]=1 then F[i,j].left  := ifthen(slip(i,j,-F[i-1,j-1].left -1)=F[i-1,j-1].left +1,F[i-1,j-1].left +1,F[i,j].left );
               if E[i-1,j+1]=1 then F[i,j].right := ifthen(slip(i,j, F[i-1,j+1].right+1)=F[i-1,j+1].right+1,F[i-1,j+1].right+1,F[i,j].right);
               Ans := max(max(F[i,j].left,F[i,j].right),Ans);
             End;
  writeln(Ans);
End.

这个代码仍然过不了最后一个点

但是第四个点也爆了!!!

墙裂要求检查一下此题数据准确性 @chen_zhe


by CreeperLordVader @ 2019-08-09 14:07:01

不要怀疑数据的正确性


by NKL丶 @ 2019-08-09 14:10:16

@Cubeneo 很明显就是2没有错啊,你手动验证数据的答案,就会发现你的程序很明显错了


by NKL丶 @ 2019-08-09 14:11:11

还有,不要怀疑一道有4.6k人通过的题目


by Doveqise @ 2019-08-09 14:12:04

不要怀疑一道有4.6k人通过的题目


by Cubeneo @ 2019-08-09 14:14:35

Umm


by 东方澂 @ 2019-08-09 14:16:33

不要怀疑一道有

\color{red}4.6k

人通过的题目


by Cubeneo @ 2019-08-09 14:19:13

我第二次的代码对于我的Hack数据没有问题

@Doveqise @NKL丶炎 @CreeperLordVader

虽然搞不懂为什么出错,但此贴重点好像是求帮忙DEBUG吧。。。

总之我这辣鸡代码能砍下11个点就说明数据有点水


by 安全修改 @ 2019-08-24 13:30:39

不要怀疑一道有4.6k人通过的题目


|