算法:递归
分析:真的是一道很裸很裸的题,由于各种乱搞导致此题丢掉了各种情况。其实用一下求前N项和的方法,若前N项和为0则为A,否则若是终点-起点+1即是B,否则为C,直接递归,简化了不少代码量。
program kitty;
const
maxn=256;
var
len:longint;
a,sum:array [0..maxn] of longint;
procedure init;
var
i:longint;
x:char;
begin
fillchar(sum,sizeof(sum),0);
len:=0;
while not eoln do
begin
read(x);
inc(len);
a[len]:=ord(x)-48;
end;
for i:=1 to len do sum[i]:=sum[i-1]+a[i];
end;
procedure calc(l,r:longint);
var
temp:longint;
begin
temp:=sum[r]-sum[l-1];
if (temp=0) or (temp=r-l+1) then
begin
if temp=0 then write('A')
else write('B');
end
else
begin
write('C');
calc(l,(l+r) shr 1);
calc(((l+r) shr 1)+1,r);
end;
end;
begin
assign(input,'kitty.in'); reset(input);
assign(output,'kitty.out'); rewrite(output);
init;
calc(1,len);
writeln;
close(input); close(output);
end.