题解

273 条题解

  • 0
    @ 2009-06-20 21:38:16

    USACO上那题的简单版

    开一个表然后扫描n次,更新最值

    program Agent;

    var

    n,m,cln:longint;

    f:array[1..1000,1..1000]of boolean;

    procedure init;

    var

    i,x,y,t:longint;

    begin

    readln(n,m);

    for x:= 1 to n do

    for y:= 1 to m do

    begin

    read(t);

    if t=1 then f[x,y]:=true else f[x,y]:=false;

    end;

    end;

    procedure main;

    var

    i,x,y,t:longint;

    begin

    for x:= 1 to n do

    for y:= 1 to m do

    if f[x,y] then

    begin

    cln:=1;

    break;

    end;

    if m

  • 0
    @ 2009-06-03 13:42:55

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05?font color=#CC3366>答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    第五个点????????

    f:=min(ff,f)+1{a=1}

    不太理解,那位大牛详细讲下?

  • 0
    @ 2009-05-31 14:20:37

    program p1057;

    var

    n ,m ,max :longint;

    house :array[0..1005,0..1005]of longint;

    procedure init;

    var

    i ,j :longint;

    begin

    readln(n,m);

    for i:=1 to n do

    begin

    for j:=1 to m do

    read(house);

    readln;

    end;

    end;

    function min(a,b,c:longint):longint;

    begin

    if a>b then if b>c then exit(c)

    else exit(b)

    else if a>c then exit(c)

    else exit(a);

    end;

    procedure building;

    var

    i ,j :longint;

    begin

    max:=0;

    for i:=1 to n do

    for j:=1 to m do

    if house=1 then

    begin

    house:=min(house,house,house)+1;

    if max

  • 0
    @ 2009-05-23 20:47:49

    第一次:

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:运行超时|无输出...

    ├ 测试数据 10:答案正确... 447ms

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:90 有效耗时:447ms

    第二次:

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:运行超时|无输出...

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:90 有效耗时:0ms

    第三次:

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 416ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:416ms

    三次程序一样,同样评测机,结果不同。Why?

    AC率啊

  • 0
    @ 2009-05-19 18:40:13

    注意两点:

    1,状态转移方程是min,我当成max了。。。;

    2, min(ans )最小值赋为1,以免出现边长为0的输出;

  • 0
    @ 2009-05-19 14:09:12

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 56ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:56ms

  • 0
    @ 2009-05-24 15:03:06

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 431ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:431ms

    var

    max,d,n,m,i,j,c,e,f:integer;

    a:array[1..1000,1..1000]of integer;

    begin

    readln(n,m);

    for i:=1 to n do

    for j:=1 to m do

    read(a);

    max:=1;

    for i:=1 to n do

    for j:=1 to m do

    if a=1 then

    begin

    c:=-1;

    repeat

    d:=1;

    for e:=i to i+c do

    begin

    for f:=j to j+c do

    if (a[e,f]=0)or (e>n) or (f>m)

    then begin

    d:=0;

    break;

    end;

    if d=0 then break;

    end;

    inc(c);

    if max

  • 0
    @ 2009-05-17 09:19:39

    var

    max,min,i,j,n,m:integer;

    f:array[1..1000,1..1000]of integer;

    begin

    readln(n,m);

    max:=0;

    for i:=1 to n do for j:=1 to m do read(f);

    for i:=2 to n do for j:=2 to m do if f0 then

    begin

    min:=10000;

    if f

  • 0
    @ 2009-05-10 10:22:22

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    50题纪念!!

  • 0
    @ 2009-05-02 09:59:12

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var

    i,j,n,m,max:longint;

    F:array[0..1000,0..1000]of longint;

    function min(a,b:longint):longint;

    begin

    if a>b then exit(b)

    else exit(a);

    end;

    begin

    readln(n,m);

    for i:=1 to n do

    for j:=1 to m do

    read(f);

    max:=-maxint;

    for i:=1 to n do

    for j:=1 to m do

    begin

    if f0 then

    f:=min(min(f,f),f)+1;

    if f>max then max:=f;

    end;

    writeln(max);

    end.

    看了大牛们的代码,才知道用dp是这样做的。

  • 0
    @ 2009-04-30 21:53:21

    program vijos1057;

    var map:array[1..1000,1..1000] of 0..1;

    t,i,j,n,m:integer;

    procedure search(p,q:integer);

    var s,ai,aj:integer;

    begin

    s:=0;

    repeat

    inc(s);

    for ai:=0 to s-1 do

    begin

    for aj:=0 to s-1 do

    if map[p+ai,q+aj]=0 then break;

    if (ajs-1) or ((aj=s-1) and (map[p+ai,q+aj]=0)) then break;

    end;

    until (ajs-1) or (ais-1) or ((aj=s-1) and (map[p+ai,q+aj]=0)) or ((ai=s-1) and (map[p+ai,q+aj]=0));

    {writeln('s=',s);}

    if t

  • 0
    @ 2009-04-27 13:03:10

    var f,a:array[0..1000,0..1000] of integer;

    f1,f2:array[0..1000,0..1000] of integer;

    i,j,k,n,m,max:integer;

    function min(x,y:integer):integer;

    begin

    if x>y then min:=y else min:=x;

    end;

    begin

    readln(n,m);

    for i:=1 to n do for j:=1 to m do

    read(a);

    for i:=1 to n do for j:=1 to m do

    begin

    for k:=i downto 1 do if a[k,j]0 then f1:=f1+1 else break;

    for k:=j downto 1 do if a0 then f2:=f2+1 else break;

    end;

    for i:=1 to n do

    for j:=1 to m do

    if (f1>f) and (f2>f) then

    f:=f+1

    else f:=min(f1,f2);

    for i:=1 to n do for j:=1 to m do if f>max then max:=f;

    writeln(max);

    end.

    {3次}

  • 0
    @ 2009-04-13 21:03:45

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 72ms

    ├ 测试数据 10:答案正确... 742ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:814ms

    program zk;

    var

    map:array [1..1000,1..1000] of integer;

    x,y,a,b,c,i,j,m,n:integer;

    function work(x,y:integer):integer;

    var

    xo,yo:integer;

    jie:boolean;

    begin

    xo:=x; yo:=y;

    repeat

    xo:=xo+1;

    yo:=yo+1;

    until (map[xo,y]=0) or (map[x,yo]=0);

    work:=xo-x+1;

    repeat

    jie:=true;

    work:=work-1;

    for yo:=y to work+y-1 do

    begin

    for xo:=x to work+x-1 do

    if map[xo,yo]=0 then begin jie:=false; break; end;

    if map[xo,yo]=0 then begin jie:=false; break; end;

    end;

    until jie=true;

    end;

    begin

    a:=0;

    readln(n,m);

    for y:=1 to n do

    for x:=1 to m do

    read(map[x,y]);

    for y:=1 to n do

    for x:=1 to m do

    if map[x,y]=1

    then

    begin

    if a

  • 0
    @ 2009-04-07 13:03:17

    真有这么简单?

  • 0
    @ 2009-03-20 10:32:33

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    把1打成2了,我晕。。费了我3次

  • 0
    @ 2009-03-19 17:26:34

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    想了半天,原来就一个字母写错了……

  • 0
    @ 2009-03-12 12:34:15

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 03:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:70 有效耗时:0ms

    #include

    int a[2001][2001];

    int max[2002][2002][3];

    int sum;

    int small(int a,int b,int c)

    {

    if(a=1;j--)

    if(a[i][j]==1)

    {

    max[i][j][2]=small(max[i][j][0],max[i][j][1],max[j+1][2]+1);

    if(sum

  • 0
    @ 2009-02-05 12:00:33

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2008-12-15 13:28:15

    我只能贡献CE率了

    这道题交了我7次;_;

  • 0
    @ 2008-12-11 13:09:19

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var

    n,m,i,j,ans:integer;

    f:array[0..1001,0..1001] of integer;

    function min(a,b:integer):integer;

    begin

    if a>b

    then exit(b)

    else exit(a);

    end;

    begin

    readln(n,m);

    for i:=1 to n do

    for j:=1 to m do

    read(f);

    ans:=0;

    for i:=1 to n do

    for j:=1 to m do

    begin

    if f0

    then f:=min(min(f,f),f)+1;

    if ans

信息

ID
1057
难度
4
分类
动态规划 点击显示
标签
(无)
递交数
6668
已通过
3074
通过率
46%
被复制
8
上传者