I and OI
Past...

题意:给出N个数(N<=10000),求是否可以找到连续的若干个数,使得他们的和为N的倍数.

分析:首先根据抽屉原理,这个方案一定存在.

边读边做,记录1~i的和模N的余数,如果这个数出现过,那么就可以输出方案了.

code(0MS):

var   a,sum,bool:array[0..10001] of longint;
      n,i:longint;


      procedure print(l,r:longint);
      var   o:longint;
      begin
            writeln(r-l+1);
            for o:=l to r do writeln(a[o]);
            halt;
      end;

begin
      readln(n);
      for i:=1 to n do
      begin
            readln(a[i]);
            sum[i]:=(sum[i-1]+a[i]) mod n;
            if sum[i]=0 then print(1,i)
            else if bool[sum[i]]<>0 then print(bool[sum[i]]+1,i)
                 else bool[sum[i]]:=i;
      end;
end.
posted on 2011-08-12 16:47  exponent  阅读(291)  评论(0编辑  收藏  举报