题解

378 条题解

  • 0
    @ 2009-10-08 10:25:22

    var

    a:array[1..2,1..100000] of integer;

    b:string;

    c,d,e,f,g,h:longint;

    begin

    c:=1;

    readln(b);

    while b'' do

    begin

    h:=1;

    while (b[h]'E') and (h=11) and (e-f>=2)) or ((f>=11) and (f-e>=2))) or (d=c) then

    begin

    writeln(e,':',f);

    e:=0;

    f:=0;

    end;

    end;

    writeln;

    e:=0;

    f:=0;

    for d:=1 to c do

    begin

    e:=e+a[1,d];

    f:=f+a[2,d];

    if (((e>=21) and (e-f>=2)) or ((f>=21) and (f-e>=2))) or (d=c) then

    begin

    writeln(e,':',f);

    e:=0;

    f:=0;

    end;

    end;

    end.

  • 0
    @ 2009-10-07 18:13:49

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    program vijos1217;

    var i,len:longint;s,ss:ansistring;ch,p:char;

    tot:array['L'..'W']of longint;

    begin

    ss:='';

    read(ch);

    while ch'E' do

    begin

    if (ch='W')or(ch='L') then ss:=ss+ch;

    read(ch);

    end;

    if ss='' then

    begin

    writeln('0:0');

    writeln;

    writeln('0:0');

    halt;

    end;

    s:=ss;

    len:=length(s);

    repeat

    tot['W']:=0;tot['L']:=0;

    repeat

    begin

    inc(i);

    if i=11)or(tot['L']>=11))and(abs(tot['W']-tot['L'])>1))or(i=len);

    if i=21))and(abs(tot['W']-tot['L'])>1))or(i=len);

    if i

  • 0
    @ 2009-09-18 18:37:12

    详细的解题报告

    可读性强的程序

    有讲解 适合新手

    http://wwzhwdwd.blog.163.com/blog/static/128151450200981863630884

  • 0
    @ 2009-09-13 18:11:35

    这道破题我交了n次,第一次对三个点,仔细一看,原来用了string。

    改成ansi之后,对9个点,错的那个输出了0:0,再看看,原来不能用integer。

    改为long之后又交了一次,结果那个点超时,我看了看评测机,原来是可恨的sunny。

    最后交的一次是dragon,0ms…………

    我恨sunny

  • 0
    @ 2009-09-08 18:42:53

    program p1217;

    var a:array[1..1000000]of char;

    c:char;

    i1,i2,i3,i4:longint;

    begin

    {assign(output,'output1.txt');

    rewrite(output);}

    i1:=0;i2:=0;i3:=0;

    repeat

    read(c);

    i1:=i1+1;

    a[i1]:=c;

    if c='W' then i2:=i2+1 else

    if c='L' then i3:=i3+1;

    if(((i2>=11)and(abs(i2-i3)>=2))or((i3>=11)and(abs(i2-i3)>=2))) then

    begin

    writeln(i2,':',i3);

    i2:=0;

    i3:=0;

    end;

    until c='E';

    if ((i2=0)and(i3=0)and(a[1]='E'))

    then

    begin

    writeln('0:0');

    writeln;

    writeln('0:0');

    halt;

    end

    else

    begin

    writeln(i2,':',i3);

    i2:=0;i3:=0;

    writeln;

    end;

    for i4:=1 to (i1-1) do

    begin

    if a[i4]='W' then i2:=i2+1 else

    if a[i4]='L' then i3:=i3+1;

    if(((i2>=21)and(abs(i2-i3)>=2))or((i3>=21)and(abs(i2-i3)>=2))) then

    begin

    writeln(i2,':',i3);

    i2:=0;

    i3:=0;

    end;

    end;

    writeln(i2,':',i3);

    end.

  • 0
    @ 2009-11-01 21:24:59

    ===我很无语……

    ===同样的代号 用大号第一次 90分

    ===用小号 AC了

    ===再用大号才AC了

    ===无语

    ===鄙视这些 烂 测评机

  • 0
    @ 2009-09-06 10:15:04

    果然够WS,交了N次才AC.

    第六组全靠RP.....

    超时的同志们多交几次试试.....

  • 0
    @ 2009-08-29 17:04: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

    a:array[1..100000]of string;

    i,r,w,l:longint;

    f:boolean;

    begin

    r:=0;

    w:=0;l:=0;

    while true do begin

    inc(r);

    readln(a[r]);

    f:=true;

    for i:=1 to length(a[r]) do

    if a[r,i]='E' then begin

    f:=false;break;

    end else if a[r,i]='W' then begin

    inc(w);

    if (w>=11)and(w-l>=2) then begin

    writeln(w,':',l);

    w:=0;l:=0;

    end;

    end else begin

    inc(l);

    if (l>=11)and(l-w>=2) then begin

    writeln(w,':',l);

    w:=0;l:=0;

    end;

    end;

    if not f then break;

    end;

    writeln(w,':',l);

    writeln;

    w:=0;l:=0;

    for r:=1 to r do begin

    for i:=1 to length(a[r]) do

    if a[r,i]='E' then begin

    writeln(w,':',l);

    exit;

    end else if a[r,i]='W' then begin

    inc(w);

    if (w>=21)and(w-l>=2) then begin

    writeln(w,':',l);

    w:=0;l:=0;

    end;

    end else begin

    inc(l);

    if (l>=21)and(l-w>=2) then begin

    writeln(w,':',l);

    w:=0;l:=0;

    end;

    end;

    end;

    end.

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

    编译通过...

    ├ 测试数据 01:运行时错误...|错误号: 216

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

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

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

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

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

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

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

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

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

     ├ 错误行输出

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

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



    第一个就是 E

    还有要输0:0的。。

  • 0
    @ 2009-08-27 14:43:24

    边读边计算,如果双方比分差大于或等于2而且有一方的分数已经达到分数上限

    或者字符等于E就用数组存储比分,数组要开大。

  • 0
    @ 2009-08-25 07:34:55

    简单题。本题不考算法,考的是对生活的观察与体会。乒乓球比赛,一个很常见的竞赛模式,做本题时,应该联想到看过乒乓球赛的各种情况。细节很重要,本人开始就是没有处理好判定胜负的细节,导致WA了一半的点。

    算法提要:边读边计算,分两线同时计算,进行统计和判定比赛结束。判定方法:双方比分差距大于1,且有一方达到了分数上限(11或21)。最后输出时别忘了正在进行中的。

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

    10分钟,WATER,不晓得通过率怎么有点悲剧。太简单了。什么都不用考虑。范围开的暴力点

    var

    a1,a2,b1,b2,l:longint;

    ok:boolean;

    s1:string;

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

    f1,f2:array[1..2,1..1000000] of integer;

    begin

    ok:=true; b1:=1; b2:=1;

    repeat

    a2:=a2+1;

    readln(s1);

    a1:=pos('E',s1);

    if a1=0 then

    begin

    s[a2]:=s1;

    end

    else

    begin

    s1:=copy(s1,1,a1-1);

    s[a2]:=s1;

    ok:=false;

    l:=a2;

    end;

    until ok=false;

    for a1:=1 to l do

    begin

    for a2:=1 to length(s[a1]) do

    begin

    if s[a1][a2]='W' then

    begin

    f1[1,b1]:=f1[1,b1]+1;

    f2[1,b2]:=f2[1,b2]+1;

    end;

    if s[a1][a2]='L' then

    begin

    f1[2,b1]:=f1[2,b1]+1;

    f2[2,b2]:=f2[2,b2]+1;

    end;

    if (abs(f1[1,b1]-f1[2,b1])>1)and((f1[1,b1]>=11)or(f1[2,b1]>=11)) then

    b1:=b1+1;

    if (abs(f2[1,b2]-f2[2,b2])>1)and((f2[1,b2]>=21)or(f2[2,b2]>=21)) then

    b2:=b2+1;

    end;

    end;

    for a1:=1 to b1 do writeln(f1[1,a1],':',f1[2,a1]);

    writeln;

    for a1:=1 to b2 do writeln(f2[1,a1],':',f2[2,a1]);

    end.

  • 0
    @ 2009-08-16 20:00:18

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    此题WA了2遍,吐血.....

    阴险之处有二

    1 E可能第一个出现,所以要特殊判断

    2 如果最后一行为11:11或21:21 还要再输出一个0:0(下局比赛刚开始)

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

    var

    s:array[1..600000]of char;

    x,y,x1,y1,i,m:longint;

    ch:char;

    begin

    repeat

    read(ch);

    if (ch='E') or (ch='L') or (ch='W') then

    begin

    inc(m);

    s[m]:=ch;

    end;

    until ch='E';

    for i:=1 to m do

    begin

    if s[i]='E' then writeln(x,':',y);

    if s[i]='W' then inc(x)

    else inc(y);

    if( (x>=11) or (y>=11) )and(abs(x-y)>=2) then

    begin

    writeln(x,':',y);

    x:=0;y:=0

    end;

    end;

    writeln;

    x1:=0;y1:=0;

    for i:=1 to m do

    begin

    if s[i]='E' then writeln(x1,':',y1);

    if s[i]='W' then inc(x1)

    else inc(y1);

    if 这儿 的括号要 打上( (x1>=21) or (y1>=21) )and(abs(x1-y1)>=2)then

    begin

    writeln(x1,':',y1);

    x1:=0;y1:=0

    end

    end

    end.

    搞死我了

    郁闷

    两对括号 UN 了N遍啊! 我的通过率!!!呜呜

    交了N遍才AC啊!

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

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    var

    s,t:array [1..100000] of char;

    ch:char;

    i,j,k,l,w:longint;

    n:int64;

    begin

    read(ch);

    n:=0;

    while ch'E' do

    begin

    if (ch='W')or(ch='L') then

    begin

    inc(n);

    s[n]:=ch;

    end;

    read(ch);

    end;

    w:=0;

    l:=0;

    if(n=0) then

    begin

    writeln('0:0');

    writeln;

    write('0:0');

    end;

    for i:=1 to n do

    begin

    if s[i]='W' then inc(w)

    else inc(l);

    if ((w>=11)or(l>=11))and((w-2>=l)or(l-2>=w))or(i=n) then

    begin

    writeln(w,':',l);

    if (i=n)and((w>=11)or(l>=11))and((w-2>=l)or(l-2>=w)) then write('0:0');

    w:=0;

    l:=0;

    end;

    end;

    writeln;

    for i:=1 to n do

    begin

    if s[i]='W' then inc(w)

    else inc(l);

    if ((w>=21)or(l>=21))and((w-2>=l)or(l-2>=w))or(i=n) then

    begin

    writeln(w,':',l);

    if (i=n)and((w>=21)or(l>=21))and((w-2>=l)or(l-2>=w)) then write('0:0');

    w:=0;

    l:=0;

    end;

    end;

    end.

    秒杀……

  • 0
    @ 2009-08-15 20:54:28

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    var s:array[1..100000]of char;

    ch:char;

    n,i,j,l,r,x,y:longint;

    begin

    read(ch);

    while ch'E' do

    begin

    if ch in ['W','L'] then

    begin

    inc(r);

    s[r]:=ch;

    end;

    read(ch);

    end;

    if r=0 then

    begin

    for i:=1 to 2 do

    writeln('0:0');

    end

    else

    for i:=1 to r do

    begin

    if s[i]='W' then inc(x)

    else inc(y);

    if ((x>=11)or(y>=11))and(abs(x-y)>=2)or(i=r) then

    begin

    writeln(x,':',y);

    if (i=r)and((x>=11)or(y>=11))and(abs(x-y)>=2) then writeln('0:0');

    x:=0;

    y:=0;

    end;

    end;

    writeln;

    for i:=1 to r do

    begin

    if s[i]='W' then inc(x)

    else inc(y);

    if ((x>=21)or(y>=21))and(abs(x-y)>=2)or(i=r) then

    begin

    writeln(x,':',y);

    if (i=r)and((x>=21)or(y>=21))and(abs(x-y)>=2) then writeln('0:0');

    x:=0;

    y:=0;

    end;

    end;

    end.

  • 0
    @ 2009-08-15 17:28:09

    这还容易,难度还只有1,程序却这么长5555555

  • 0
    @ 2009-08-05 16:12:20

    审题!

    55555~~~~(>_

  • 0
    @ 2009-07-26 17:18:03

    交了3次终于AC,一个ansistring竟还装不了全部输入数据

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    var s:array[1..1000000] of char;

    tmp:string;

    b:boolean;

    c,w,l,temp,d,last,lengths:longint;

    begin

    b:=true;

    lengths:=0;

    while b do

    begin

    readln(tmp);

    if pos('E',tmp)0 then

    begin

    delete(tmp,pos('E',tmp),255);

    b:=false;

    end;

    while pos(' ',tmp)0 do

    delete(tmp,pos(' ',tmp),1);

    for c:=1 to length(tmp) do

    begin

    lengths:=lengths+1;

    s[lengths]:=tmp[c];

    end;

    end;

    b:=true;

    last:=1;

    while b do

    begin

    w:=0;

    l:=0;

    for d:=last to lengths do

    begin

    if s[d]='W' then w:=w+1;

    if s[d]='L' then l:=l+1;

    if ((w>=11)or(l>=11))and(abs(w-l)>=2) then break;

    end;

    last:=d+1;

    writeln(w,':',l);

    if last>lengths then b:=false;

    if ((w>=11)or(l>=11))and(abs(w-l)>=2)and(b=false) then

    writeln('0:0');

    end;

    writeln;

    b:=true;

    last:=1;

    while b do

    begin

    w:=0;

    l:=0;

    for d:=last to length(s) do

    begin

    if s[d]='W' then w:=w+1;

    if s[d]='L' then l:=l+1;

    if ((w>=21)or(l>=21))and(abs(w-l)>=2) then break;

    end;

    last:=d+1;

    writeln(w,':',l);

    if last>length(s) then b:=false;

    if ((w>=21)or(l>=21))and(abs(w-l)>=2)and(b=false) then

    writeln('0:0');

    end;

    end.

  • 0
    @ 2009-07-26 16:11:09

    貌似在10:11这样的情况下要继续打??。。。

    记得是分差超过2分才能判赢的。。。

信息

ID
1217
难度
7
分类
字符串 点击显示
标签
递交数
18717
已通过
4282
通过率
23%
被复制
33
上传者