社区讨论

80求调

P4447[AHOI2018初中组] 分组参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lzgl8uev
此快照首次捕获于
2024/08/05 14:06
2 年前
此快照最后确认于
2024/08/05 15:00
2 年前
查看原帖

80分求调

C
#include <bits/stdc++.h>

using namespace std;
#define int long long
int n;
int a[100010];
int k[100010];

signed main(){
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	sort(a + 1, a + 1 + n);
	int l = 1, r = n;
	while (l <= r){
		memset(k, 0, sizeof(k));
		int ans = 0;
		int mid = (l + r) / 2;
		for (int i = 2; i <= n; i++){
			if (a[i] - a[i - 1] > 1)
				ans++;
			else k[ans]++;
		}
		for (int i = 0; i <= ans; i++)
			k[i] += 1;
//		cout << ans << "\n";
//		for (int i = 0; i <= ans; i++)
//			cout << k[i] << " ";
//		cout << "\n";
		int minn = 0x3f3f3f3f;
		for (int i = 0; i <= ans; i++)
			minn = min(minn, k[i]);
		if (minn > mid) l = mid + 1;
		else r = mid - 1;
	}
	cout << l;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...