/ Vijos / 题库 / Crack /

题解

18 条题解

  • 0
    @ 2009-10-24 00:59:17

    冒着被封号的危险,我来晒两大段程序吧:

    第一段是这题的递归写法:

    type rec=record

    unknow:string;

    value:longint;

    end;

    var cover:array[1..50] of rec;

    s,ts:string;

    n,i,k,total,c:longint;

    function count(c:char; t:longint):longint;

    begin

    t:=t*10;

    if c='+' then exit(1+t) else

    if c='-' then exit(1+t) else

    if c='*' then exit(3+t) else

    if c='/' then exit(3+t);

    end;

    function find(s:string):longint;

    var i:longint;

    begin

    while s[1]='0' do delete(s,1,1);

    for i:=1 to total do

    if cover[i].unknow=s then exit(cover[i].value);

    end;

    procedure block(var s:string);

    var i,j,len:longint; flag:boolean;

    begin

    len:=length(s); j:=0;

    if (s[1]='(')and(s[len]=')') then

    begin

    for i:=1 to len do

    begin

    if s[i]='(' then inc(j) else

    if s[i]=')' then dec(j);

    if (j=0)and(ilen) then exit;

    end;

    delete(s,1,1);

    delete(s,length(s),1);

    end;

    end;

    function cal(s:string):longint;

    var i,len,c,t,delta,min,cut,temp:longint;

    begin

    block(s);

    if s[1]'(' then s:='0'+s;

    len:=length(s);

    temp:=0;

    val(s,temp,c);

    if c0 then

    begin

    min:=maxint; cut:=0; delta:=0;

    for i:=1 to len do

    begin

    if s[i]='(' then inc(delta) else

    if s[i]=')' then dec(delta) else

    if s[i] in ['+','-','*','/'] then

    begin

    t:=count(s[i],delta);

    if t='0' do

    begin

    t:=t+st[a];

    inc(a);

    end;

    for i:=1 to n do

    if v[i].s=t then exit(v[i].c);

    val(t,find);

    end;

    function cal(a:char):longint;

    begin

    case a of

    '+': exit(1);

    '-': exit(2);

    '*': exit(3);

    '/': exit(4);

    '(': exit(5);

    ')': exit(6);

    '#': exit(7);

    end;

    end;

    begin

    readln(t);

    for m:=1 to t do

    begin

    readln(st);

    readln(n);

    for i:=1 to n do

    begin

    readln(v[i].s);

    k:=pos('=',v[i].s);

    val(copy(v[i].s,k+1,length(v[i].s)-k),v[i].c);

    delete(v[i].s,k-1,length(v[i].s)-k+2);

    end;

    fillchar(num,sizeof(num),0);

    fillchar(opt,sizeof(opt),#0);

    st:=st+'#';

    i:=1;

    while i='0' then

    begin

    inc(p2);

    num[p2]:=find(i);

    end else

    begin

    case f[cal(opt[p1]),cal(now)] of

    '>':

    begin

    num[p2-1]:=count(num[p2-1],num[p2],opt[p1]);

    dec(p2); dec(p1);

    end;

    '

  • 0
    @ 2009-10-20 15:18:45

    Flag   

    题号   P1256

    类型(?)   字符串处理

    通过   55人

    提交   555次

    55 555 囧~~~~

  • 0
    @ 2009-07-30 16:24:42

    错把字符串当字符,苦调1小时终发现....

  • 0
    @ 2009-07-30 14:26:58

    data无误

    用一个stack维护即可

  • 0
    @ 2009-07-03 18:55:30

    是不是无论输出什么,都会显示:

    答案错误:标准行输出 Scen...

    错误行输出 2888

    ?????

    每次我都会变一下输出的第一行,但回应我的却总是这两行....

  • 0
    @ 2009-04-18 21:59:18

    编译通过...

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

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

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

    啊?????????????????

    一次AC!!!

  • 0
    @ 2009-01-12 10:40:41

    const

    xiaoxie=['a'..'z'];

    fuhao=['-','=','+'];

    //>

    function panduan(st:string):boolean;

    var

    i:longint;

    begin

    for i:=1 to length(st) do

    if st[i] in xiaoxie

    then exit(true);

    exit(false);

    end;

    //>

    procedure init;

    begin

    readln(a);

    step1:=0;

    step2:=1;

    d:=pos('=',a);

    end;

    //

    begin

    init;

    work;

    write(ans);

    end.

  • 0
    @ 2008-10-23 19:06:59

    实在是好事多磨,多少天了,我终于把这题干掉了!

    ___|\__|\__|\__|\__|\__|\__|__

    | |

    | |

    | A C |

    | |

    | |

    | 300 |

    | |

    | |

    | 题 |

    | |

    | 纪 |

    | |

    | 念 |

    | |

    | 碑 |

    | |

    ___|\__||\__|\__|\__|\__|\__|\__|\__|__|___|\_|

    | |

    | |

    | 流芳百世 永垂不朽 |

    | |

    |___|\__|\__|\__|\__|\__|\__|\__|\__|\__|\__|\___|_|

  • 0
    @ 2008-10-07 20:09:37

    其实没什么可注意的,把p1003一改就AC了,就是不知道为什么通过率这么低。难道都像我一样复制样例输出的"Scenario #1:"时候把中间那个看不见的‘?’给复制上了……

  • 0
    @ 2008-10-04 22:50:11

    终于过了...

    用的noipTG05最后那题 的时候写的表达式求值模块

    然后所有的 A = 2 之类的可以看作字符串替代

    当然,要先按长度从大到小排序

    因为

    I = 2

    In = 3

    前者可能就把字符串给替代了.

  • 0
    @ 2007-11-13 10:59:15

    理论上说...

    数据是对的....

    pzy3303说的情况是不需要考虑的..

  • 0
    @ 2007-11-06 15:40:43

    数据错了吧。

  • 0
    @ 2007-09-18 21:44:42

    终于AC了,数据有一个问题

    题目中:“字符串 = 数字”的格式给出每个字符串所代表的数字。

    但会出现表达式,要特殊处理下

  • 0
    @ 2007-07-25 18:01:52

    样例中应该是英文的 ':' 而不是中文的 ':'

    然后正常做即可,处理负数的时候我是在负数前面统一加0处理

    www.starea.cn

  • 0
    @ 2006-10-10 13:18:09

    hoooooooooo~ 好恶心啊

  • 0
    @ 2006-10-08 21:02:08

    哈哈哈,今天运气好,我一个小垃圾居然捡到一个第一AC,提示一下,这题数据貌似有问题,可能表达式比想象的要长一点,为此tle了好久

  • 0
    @ 2006-10-08 11:58:59

    按理说是容易题...

  • 0
    @ 2006-10-07 11:38:09

    UP一下,第一个到的

  • 1

信息

ID
1256
难度
8
分类
字符串 | 表达式处理 点击显示
标签
(无)
递交数
229
已通过
34
通过率
15%
被复制
4
上传者