回 帖 发 新 帖 刷新版面

主题:2005年的普及组复赛

大家觉得今年复赛怎么样?
尤其是难度你们有什么看法?
本人自己认为难易度适中
就是第四题我没有做出来
大家中若有高手
那一位帮我解一解题啊?
希望大家多多帮助
谢谢!!!!!!!!!!!

回复列表 (共8个回复)

沙发

好啊
跟我一样么?
是不是他们出的第四题
其中在题目上有点问题呢?
说不准

板凳

废话
答案有么?
若有,那出来说说

3 楼

答案我们不都一样么?
反正我们谁都没有做出来着道题目

4 楼

第一个就是用IF进行判断,第二是一个1..10000的BOOLEAN数组,第三是动态规划,背包问题的变形.第四个用高精度,当时忘了高精度怎么实现,没有做

5 楼

高手,我一题都没做,反正我对自己没信心,平时考试也是倒数第N(N=1--5)

6 楼

[quote]第一个就是用IF进行判断,第二是一个1..10000的BOOLEAN数组,第三是动态规划,背包问题的变形.第四个用高精度,当时忘了高精度怎么实现,没有做[/quote]
好,的确是高手!但不知道背包问题的(比如我),做起来有些麻烦了^^^^^^

7 楼

第四题我也没做出来,但解法我有
const f='^*+-@';
      p:array[1..5,1..5] of 0..1=((1,1,1,1,1),(0,1,1,1,1),(0,0,1,1,1),(0,0,1,1,1),(0,0,0,0,0));
var i,j,t1,t2,n:longint;
    ch1,ch:string;
    a:array[-20..20] of int64;
    p1:boolean;

function work(a:longint;ch:string):int64; {将a的值代入表达式ch,进行表达式值的计算}

procedure js(var a:int64;b:int64;c:char); {计算a?b}
var i:longint;t:int64;
begin
     case c of
     '^':begin
         t:=1;
         for i:=1 to b do t:=t*a;
         a:=t;
     end;
     '*':a:=a*b;
     '+':a:=a+b;
     '-':a:=a-b;
     end;
end;

var i,j,k,lb,lc,t,s:longint;
    b:array[1..50] of int64;
    c:array[1..50] of char;
begin
    i:=1;lb:=0;lc:=1;
    while ch[i]=' ' do inc(i);
    ch:=copy(ch,i,200);
    i:=0;
    ch:=ch+'@';
    if (ch[1]='+')or(ch[1]='-') then ch:='0'+ch;
    fillchar(b,sizeof(b),0);
    fillchar(c,sizeof(c),' ');
    c[lc]:='@';
    while i<length(ch) do begin
        inc(i);
        if ch[i] in ['0'..'9'] then
        begin
            inc(lb);
            while ch[i] in ['0'..'9'] do begin b[lb]:=b[lb]*10+ord(ch[i])-ord('0');inc(i);end;dec(i);
        end else if ch[i]='a' then begin
            inc(lb);
            b[lb]:=a;
        end else if ch[i]='(' then begin
            s:=1;t:=i+1;
            while s>0 do begin
            if ch[t]='(' then inc(s);
            if ch[t]=')' then dec(s);
            inc(t);
            end;
            dec(t);
            inc(lb);
            b[lb]:=work(a,copy(ch,i+1,t-i-1));
            i:=t;
        end else if ch[i]<>' ' then begin
            t:=pos(c[lc],f);
            s:=pos(ch[i],f);
            while (p[t,s]=1) do begin
                js(b[lb-1],b[lb],c[lc]);
                c[lc]:=' ';
                b[lb]:=0;
                dec(lc);
                b[lb]:=0;
                dec(lb);
                t:=pos(c[lc],f);
            end;
            inc(lc);
            c[lc]:=ch[i];
        end;
    end;
    work:=b[1];
end;

begin
     assign(input,'equal.in');
     assign(output,'equal.out');
     rewrite(output);
     reset(input);
     readln(ch1);
     readln(n);
     for i:=-15 to 15 do a[i]:=work(i,ch1); {将-15到15代入原表达式}
     for i:=1 to n do begin
         p1:=true;
         readln(ch);
         for j:=-15 to 15 do if work(j,ch)<>a[j] then begin p1:=false;break;end; {再次一一代入,检查是否都一样}
         if p1 then write(chr(ord('A')-1+i));
     end;
     writeln;
     close(input);
     close(output);
end.

8 楼

我老师给的答案!

我来回复

您尚未登录,请登录后再回复。点此登录或注册