主题:2005年的普及组复赛
xuhw
[专家分:40] 发布于 2005-11-20 11:42:00
大家觉得今年复赛怎么样?
尤其是难度你们有什么看法?
本人自己认为难易度适中
就是第四题我没有做出来
大家中若有高手
那一位帮我解一解题啊?
希望大家多多帮助
谢谢!!!!!!!!!!!
回复列表 (共8个回复)
沙发
若雪 [专家分:50] 发布于 2005-11-20 11:47:00
好啊
跟我一样么?
是不是他们出的第四题
其中在题目上有点问题呢?
说不准
板凳
xuhw [专家分:40] 发布于 2005-11-20 12:19:00
废话
答案有么?
若有,那出来说说
3 楼
若雪 [专家分:50] 发布于 2005-11-20 14:01:00
答案我们不都一样么?
反正我们谁都没有做出来着道题目
4 楼
vvv832 [专家分:360] 发布于 2005-11-20 15:13:00
第一个就是用IF进行判断,第二是一个1..10000的BOOLEAN数组,第三是动态规划,背包问题的变形.第四个用高精度,当时忘了高精度怎么实现,没有做
5 楼
编程黑客 [专家分:1660] 发布于 2006-01-17 22:02:00
高手,我一题都没做,反正我对自己没信心,平时考试也是倒数第N(N=1--5)
6 楼
michaellyz [专家分:270] 发布于 2006-01-18 19:24:00
[quote]第一个就是用IF进行判断,第二是一个1..10000的BOOLEAN数组,第三是动态规划,背包问题的变形.第四个用高精度,当时忘了高精度怎么实现,没有做[/quote]
好,的确是高手!但不知道背包问题的(比如我),做起来有些麻烦了^^^^^^
7 楼
贺天行宝 [专家分:2300] 发布于 2006-02-08 09:39:00
第四题我也没做出来,但解法我有
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 楼
贺天行宝 [专家分:2300] 发布于 2006-02-08 09:39:00
我老师给的答案!
我来回复