Kitty猫基因编码(AHOI2002)

本文通过递归算法分析并解决了一个名为Kitty的问题,采用前N项和的方法简化了代码,通过判断前N项和是否为0或终点与起点之差加1来确定答案类型,最终输出为A、B或C。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法:递归

分析:真的是一道很裸很裸的题,由于各种乱搞导致此题丢掉了各种情况。其实用一下求前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.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值