题意:给出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.