zoukankan      html  css  js  c++  java
  • 【NOIP2011PJ】表达式的值

    暴力弄一弄(搞一搞)就可以了哦~

    var
            zf:array[1..100000] of char;
            c0,c1:array[0..100000] of int64;
            s:ansistring;
            n,i,j,ss:longint;
    begin
            //assign(input,'ccc.in');reset(input);
            //assign(output,'ccc.out');rewrite(output);
            readln(n);
            readln(s);
            s:='('+s+')';
            ss:=1;
            c0[ss]:=1;
            c1[ss]:=1;
            for i:=1 to length(s) do
            begin
                    {for j:=1 to ss-1 do
                            write(zf[j]);
                    writeln;
                    for j:=1 to ss do
                            write(c0[j],' ');
                    writeln;
                    for j:=1 to ss do
                            write(c1[j],' ');
                    writeln;
                    writeln;}
                    if (s[i]='*')and(s[i+1]<>'(') then
                    begin
                            inc(ss);
                            c0[ss]:=1;
                            c1[ss]:=1;
                            c0[ss]:=(c0[ss-1]*c0[ss]+c0[ss-1]*c1[ss]+c0[ss]*c1[ss-1]) mod 10007;
                            c1[ss]:=(c1[ss-1]*c1[ss]) mod 10007;
                            c0[ss-1]:=c0[ss];
                            c1[ss-1]:=c1[ss];
                            dec(ss);
                    end else if (s[i]='+')or(s[i]='(')or(s[i]='*') then
                    begin
                            inc(ss);
                            c0[ss]:=1;
                            c1[ss]:=1;
                            zf[ss-1]:=s[i];
                    end else if s[i]=')' then
                    begin
                            while zf[ss-1]<>'(' do
                            begin
                                    c1[ss]:=(c1[ss-1]*c1[ss]+c1[ss-1]*c0[ss]+c1[ss]*c0[ss-1]) mod 10007;
                                    c0[ss]:=(c0[ss]*c0[ss-1]) mod 10007;
                                    c1[ss-1]:=c1[ss];
                                    c0[ss-1]:=c0[ss];
                                    dec(ss);
                            end;
                            c1[ss-1]:=c1[ss];
                            c0[ss-1]:=c0[ss];
                            ss:=ss-1;
                            if zf[ss-1]='*' then
                            begin
                                    c0[ss]:=(c0[ss-1]*c0[ss]+c0[ss-1]*c1[ss]+c0[ss]*c1[ss-1]) mod 10007;
                                    c1[ss]:=(c1[ss-1]*c1[ss]) mod 10007;
                                    c0[ss-1]:=c0[ss];
                                    c1[ss-1]:=c1[ss];
                                    dec(ss);
                            end;
                    end;
            end;
            writeln(c0[1] mod 10007);
            //close(input);
            //close(output);
    end.
    
    转载需注明出处。
  • 相关阅读:
    国际组织
    波段
    hhgis驱动
    百度地图格式
    气象数据格式
    汽车用传感器
    无线传感器网络
    【系统软件工程师面试】7. 消息队列
    【ToDo】存储设计概述
    Arthas: Java 动态追踪技术
  • 原文地址:https://www.cnblogs.com/jz929/p/11817732.html
Copyright © 2011-2022 走看看