3783. 【NOIP2014模拟8.19】签到题

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值