(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)