(File IO): input:checkin.in output:checkin.out
Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Special Judge
Description
给定n个数,求出这n个数的一个非空子集,使得这个子集中的数的和能被n整除,无解输出-1.
Input
第一行为数据组数T
接下来T组数据,每组数据第一行为一个正整数n,第二行为n个用空格分开的数。
Output
对于每一组数据,如果无解输出一行一个整数-1;否则第一行输出一个正整数m,表示子集的大小,然后在第二行输出m个数,分别是这个子集中的数。如果有多种方案,输出任意一种。
Sample Input
1 1 1
Sample Output
1 1
Data Constraint
对于30%的数据 n<=20
对于50%的数据 n<=100
对于70%的数据 n<=1000
对于100%的数据 n<=100000,T<=10
总结:
这道题水法竟然能切。
等等, 非空子集为什么非要是连续的?
不解WA0。
我考场的做法:
f[i][j]到第i位和为j的方案数, g[i][j]为ij下是从哪个位置转移来的。
然后从后往前找f[i][0]!=0, 往前回溯。
为什么错?
正解:
若数列中有0, 输出即可。
考虑前缀和数列, 有n + 1个取值。
mod n 后在[0, n)之间, 故至少有一对是相等的, 找出就行。
加上桶O(n)