URAL 1032 A - Find a Multiple——抽屉原理+构造
#include #include #include #include using namespace std;const int maxn = 2 * 1e4 + 10;int n, a[maxn], dp[maxn], vis[maxn];int main() { while (~scanf("%d", &n)) { if (n == 0) { printf("0\n"); continue; } memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); dp[1] = a[1]; if (dp[1] % n == 0) { printf("%d\n%d\n", 1, a[1]); continue; } vis[dp[1] % n] = 1; bool ok = false; for (int i = 2; i <= n; i++) { dp[i] = dp[i - 1] + a[i]; if (dp[i] % n == 0) { ok = true; printf("%d\n", i); for (int j = 1; j <= i; j++) printf("%d\n", a[j]); break; } else if (vis[dp[i] % n]) { ok = true; printf("%d\n", i - vis[dp[i] % n]); for (int j = vis[dp[i] % n] + 1; j <= i; j++) printf("%d\n", a[j]); break; } vis[dp[i] % n] = i; } if (!ok) printf("%d\n", 0); } return 0;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~