首页 > 其他 > 详细

Northeast North America 2019 C Cutting the Necklace

时间:2021-05-10 09:03:27      阅读:20      评论:0      收藏:0      [点我收藏+]

题意:

给出一个长度为n的环,环上每个单位都有一个价值。要求使得将其分成恰好k段,每段的价值和相等。是否存在这种切法。

思路:

设和为sum,如果存在解,那么一定会是这样的
技术分享图片

显然在12段之间的分界点上其sum[1] % avg 与 23段、34段、41段的和% avg相等,所以只需要判断是否有k个这样的分界点即可。前缀和预处理和暴力枚举都是 \(O(n)\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int n, k;
ll sum[10000005], w;
map<ll, ll> cnt;

int main() {
	scanf("%d%d", &k, &n);
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &w);
		sum[i] = sum[i - 1] + w;
	}
	if (n >= k) {
		if (sum[n] % k == 0) {
			bool flag = false;
			ll avg = sum[n] / k;
			for (int i = 1; i <= n; i++) {
				cnt[sum[i] % avg]++;
				if (cnt[sum[i] % avg] >= k) {
					flag = true;
					break;
				}
			}
			if (flag) puts("YES");
			else puts("NO");
		} else puts("NO");
	} else puts("NO");
}

Northeast North America 2019 C Cutting the Necklace

原文:https://www.cnblogs.com/LYFer233/p/14749244.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!