B. National Project

https://codeforces.com/problemset/problem/1303/B

题意:给定一个长度n,还有两个数字g和b。一段g和一段b组成一个区间,有无数个这样的连续区间。现在需要构建连续的一段长度,并且要求这段长度包含至少(n + 1) / 2的segmentation是g,问至少需要多长的连续区间长度。

思路:根据g的要求,容易推断出需要多少个包含了g和b的区间。然后我们考虑将这些区间中的b加起来,是否能够达到长度n,如果超过了长度n,说明至少需要这么多。如果不足长度n,说明g够了,但是b没够,但是b也可以改成g,后面没构造完的长度就可以直接造成g或者b,那么答案就是n了。

总结:很容易知道要使用多少个区间,但是最后一个区间要不要使用b,要根据前面的区间总长度加起来跟n去对比,再做决定,不够就加,够了就不适用最后一个区间的b。

inline void solve() {
	int n, g, b;
	cin >> n >> g >> b;

	int need = (n + 1) / 2;
	int blocks = (need + g - 1) / g;

	long long tot = need + 1ll * (blocks - 1) * b;
	tot = max<long long>(tot, n);

	cout << tot << '\n';
}
posted @ 2025-05-12 09:34  _Yxc  阅读(11)  评论(0)    收藏  举报