30 条题解

  • 0
    @ 2016-04-01 09:59:31

    http://www.cnblogs.com/Coolxxx/p/5335523.html
    测试数据 #0: Accepted, time = 0 ms, mem = 556 KiB, score = 10
    测试数据 #1: Accepted, time = 0 ms, mem = 552 KiB, score = 10
    测试数据 #2: Accepted, time = 0 ms, mem = 552 KiB, score = 10
    测试数据 #3: Accepted, time = 0 ms, mem = 556 KiB, score = 10
    测试数据 #4: Accepted, time = 0 ms, mem = 552 KiB, score = 10
    测试数据 #5: Accepted, time = 0 ms, mem = 560 KiB, score = 10
    测试数据 #6: Accepted, time = 15 ms, mem = 556 KiB, score = 10
    测试数据 #7: Accepted, time = 0 ms, mem = 556 KiB, score = 10
    测试数据 #8: Accepted, time = 0 ms, mem = 556 KiB, score = 10
    测试数据 #9: Accepted, time = 0 ms, mem = 552 KiB, score = 10
    Accepted, time = 15 ms, mem = 560 KiB, score = 100

  • 0
    @ 2009-10-04 16:16:50

    编译通过...

    ├ 测试数据 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-10-04 14:02:39

    program cly;

    const

    inf='p1582.in'; ouf='p1582.out';

    NO='Nobody can win!';

    var

    name:array[1..100]of string;

    n,a,b,i:longint;

    begin

    readln(n);

    readln(a,b);

    for i:=1 to n do

    readln(name[i]);

    if a*b mod 80 then writeln(NO) else

    begin

    write(name[(a*b div 4 -1) mod n +1]);

    writeln(' can win!');

    end;

    end.

  • 0
    @ 2009-08-15 21:23:52

    var

    i,j,k:longint;

    o,n,m:longint;

    player:array[0..50] of string;

    procedure noanswer;

    begin

    writeln('Nobody can win!');

    halt;

    end;

    begin

    readln(o);

    readln(n,m);

    for i:=1 to o-1 do

    readln(player[i]);

    readln(player[0]);

    if (n=0) or (m=0) then writeln(player[1],' can win!');

    if (n*m mod 40) then noanswer;

    if (n*m mod 80) then noanswer;

    if (n=1) or (m=1) then noanswer;

    k:=n*m;

    k:=k div 4;

    writeln(player[k mod o],' can win!');

    end.

  • 0
    @ 2009-08-14 10:43:48

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    只要N*M MOD 8 = 0 then 有解

  • 0
    @ 2009-08-11 10:58:12

    很多疑惑:

    1.个人认为此题描述不清,想法同楼下~应该是每个人都按照有解的方向填充,而不是最优决策

    2.为什么n*m mod 8是有解的,怎么证明?

  • 0
    @ 2009-08-10 15:43:54

    这题我不懂。。。

    什么是最优决策?

    如果一个人事先用该题的标程算出自己会输,

    他要是捣乱一下,

    乱摆L形使地图无法填满,

    使该赢的人摆不成L,

    那么他不就能平局了吗?

    比如地图:

    0000

    0000

    俩人玩,第一个人要是这样摆

    1110

    1000

    那他准输。

    要是他这样摆:

    0100

    0111

    俩人就平局了。这样对于他是更优的吧?

  • 0
    @ 2009-08-10 13:53:27

    var

    o,n,m,i,j,k,sum,ss:longint;

    name:array[1..50,1..1000]of char;

    a:array[1..50]of longint;

    s:string;

    begin

    readln(o);

    readln(n,m);

    for i:=1 to o do

    begin

    readln(s);

    a[i]:=length(s);

    for j:=1 to a[i] do

    name:=s[j];

    end;

    if (n*m mod 80)or(n mod 20)or(m mod 20) then begin write('Nobody can win!'); halt; end

    else

    begin

    sum:=(n*m div 4);

    if sum

  • 0
    @ 2009-08-09 13:32:54

    第200个AC...

    纪念一下

  • 0
    @ 2009-08-09 11:25:31

    比赛的时候只有60分。。。。。

  • 0
    @ 2009-08-09 10:00:57

    对于n*m mod 8 的我的理解:

    首先,我们知道,可以拼出:

    0001

    0111 这样的2*4的块。

    然后,我们想,若一条边长为奇数呢?

    然后,凭借俄罗斯方块的经验,我们可以拼出:

    000

    011

    221

    231

    234

    334

    544

    555 这样的一个3*8 的块。

    所以我们可以知道,当一条边为8的倍数的时候,另一条边只要大于1,则有解。

    综上, mod 8 是绝对科学的。

    俄罗斯方块是智者的游戏!

  • 0
    @ 2009-08-09 01:02:33

    严重抗议!!!!!!!!!!!!!!

    var

    name:array [1..50] of string[50];

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

    function pd:boolean;

    begin

    if (n>=8) and (n mod 8=0) and (m>1) then exit(true);

    if (m>=8) and (m mod 8=0) and (n>1) then exit(true);

    if (n mod 2=0) and (m mod 4=0) and (n>=2) and (m>=4) then exit(true);

    if (m mod 2=0) and (n mod 4=0) and (m>=2) and (n>=4) then exit(true);

    exit(false);

    end;

    begin

    readln(o);

    readln(n,m);

    for i:=1 to o do readln(name[i]);

    if pd

    then begin

    ans:=n*m div 4;

    ans:=ans mod o;

    if ans=0 then ans:=o;

    writeln(name[ans],' can win!');

    end

    else writeln('Nobody can win!');

    end.

    才70分!!

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

    var

    name:array [1..50] of string[50];

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

    function pd:boolean;

    begin

    if (n>=8) and (n mod 8=0) and (m>1) then exit(true);

    if (m>=8) and (m mod 8=0) and (n>1) then exit(true);

    if (n mod 2=0) and (m mod 4=0) and (n>=2) and (m>=4) then exit(true);

    if (m mod 2=0) and (n mod 4=0) and (m>=2) and (n>=4) then exit(true);

    exit(false);

    end;

    begin

    readln(o);

    readln(n,m);

    for i:=1 to o do readln(name[i]);

    if pd

    then begin

    ans:=(n*m div 4-1) mod o+1;

    writeln(name[ans],' can win!');

    end

    else writeln('Nobody can win!');

    end.

    AC了

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

    唯一的差别就是:

    70分:

    ans:=n*m div 4;

    ans:=ans mod o;

    if ans=0 then ans:=o;

    AC的:

    ans:=(n*m div 4-1) mod o+1;

    这也能叫差别吗???????题目也没说限制代码的行数吖!!!!

    怎么就少了30分!!!!!!!!!!!!!!!!!!!

  • 0
    @ 2009-08-09 00:16:52

    其实我觉得第一个人在很多情况下完全可以让自己不输(就是使矩阵无法被填满),所谓最优,其实不然

  • 0
    @ 2009-08-08 22:48:07

    交了不下十次才A!!!

    开始写的巨长,看了别个大牛的思路后边改边交,最后就剩下这么多

    var

    o,m,n,i,k:longint;

    st:array[1..50] of string;

    begin

    readln(o);

    readln(n,m);

    for i:= 1 to o do readln(st[i]);

    if (n*m= 0) or (n*m mod 8 0) then begin

    writeln('Nobody can win!');

    halt;

    end;

    k:= (n*m div 4-1) mod o+1;

    writeln(st[k],' can win!');

    end.

  • 0
    @ 2009-08-08 22:21:21

    搞了N次才知道,原来是-4,不是DIV 4,贴程序供大家鄙视:

    program p1582;

    var

    s:array[1..50] of string;

    total,m,n,a,i,tmp:longint;

    begin

    readln(a);

    readln(m,n);

    for i:=1 to a do

    readln(s[i]);

    if m*n mod 80 then writeln('Nobody can win!')

    else

    begin

    tmp:=m*n;

    total:=0;

    while tmp-4>=0 do

    begin

    tmp:=tmp-4;

    inc(total);

    if total>a then total:=total-a;

    end;

    writeln(s[total],' can win!');

    end;

    end.

  • 0
    @ 2009-08-08 22:00:15

    这题有漏洞啊!!

    1*8的情况没考虑!

  • 0
    @ 2009-08-08 21:39:01

    L能拼出来的最基础的块:::

    0 1 1 1

    0 0 0 1

    其他的都是由这个块拼的(无其他情况)

    就这样YY出来了

    (考试的时候YY的是

    1 1 1 4

    2 2 1 4

    2 3 4 4

    2 3 3 3

    没看到右边那个...忘记复制到记事本里了......只过了4个)

  • 0
    @ 2009-08-08 21:21:37

    比赛情况考虑少了,LX,你加上那个也不错,只是数据没有罢了

  • 0
    @ 2009-08-08 21:02:23

    为什么n*m mod 8=0就可以,1*8也可以吗

信息

ID
1582
难度
5
分类
其他 | 数学 点击显示
标签
递交数
1541
已通过
523
通过率
34%
被复制
2
上传者