. . 这是一道水题,主要是题目描述不清楚。 题意是有一个老师要准备n种礼物,每种礼物有ai个,老师要把这些礼物放到很多个小孩子的座位上,要连续摆放,每个座位放两种礼物,分为普通礼物和神秘礼物,问最多多少个孩子能够满足和他相邻座位的普通礼物不相同。 . . 解法:假设礼物总数为sum,人数不会超过sum/2,然后直接枚举放普通礼物就好,神秘礼物不用管,看最多能放多少人 . .
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; int a[20], f[1000000] = {0}, n, m; int main() { int tt; scanf("%d", &tt); for (int cases = 1; cases <= tt; cases++) { scanf("%d", &n); m = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); m += a[i]; } int ans = 0; for (int i = 1; i <= m/2; i++) { bool flag = false; for (int j = 1; j <= n; j++) if (a[j]>0 && j != f[i-1]) { flag = true; f[i] = j; a[j]--; break; } if (flag) ans++; else break; } printf("Case #%d: %d\n", cases, ans); } }