社区讨论

Wa2 但是和答案除顺序外无差别

CF1242E Planar Perimeter参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lo9chkod
此快照首次捕获于
2023/10/28 09:09
2 年前
此快照最后确认于
2023/10/28 09:09
2 年前
查看原帖
这题貌似也没有对顺序输出要求啊。/kk
我暂且懵在谷里。
CPP
#include <bits/stdc++.h>




using namespace std;
const int N = 3e5 + 10;
int n , m;
struct node {
	int x , pos;
}a[N];
int p[N << 1] , l , r;
vector<int> ans[N];
inline bool cmp(node x , node y) {
	return x.x > y.x;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0) , cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i++) cin >> a[i].x , a[i].pos = i;
	sort(a + 1 , a + n + 1 , cmp);
	int cnt = 0 , l = 1;
	for(int i = 1;i <= a[1].x;i++) ans[a[1].pos].push_back(++cnt) , p[++r] = cnt;
	for(int i = 1;i < n;i++) {
		int rec = a[i + 1].x; a[n + 2].x = max(a[n + 2].x , 3);
		if(a[i].x - a[i + 1].x + 2 >= a[n + 2].x) a[i + 1].x = a[i].x - a[i + 1].x + 2;
		else a[i + 1].x = ((a[i].x - a[i + 1].x) % 2 == a[n + 2].x ? a[n + 2].x : a[n + 2].x + 1);
		int tem = (rec + a[i].x - a[i + 1].x) / 2 , v = rec - tem;
		for(int j = r - tem + 1;j <= r;j++) ans[a[i + 1].pos].push_back(p[j]);
		r = r - tem + 2;
		for(int j = 1;j < v;j++) ans[a[i + 1].pos].push_back(++cnt) , p[++r] = cnt; 
		ans[a[i + 1].pos].push_back(p[l]); 
		p[++r] = p[l++];
	}
	cout << cnt << '\n';
	for(int i = n;i >= 1;i--) {
		for(int j = 0;j < ans[i].size();j++) {
			cout << ans[i][j] << ' ';
		}
		cout << '\n';
	}
	return 0;
} 

回复

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

正在加载回复...