Wa2 但是和答案除顺序外无差别
查看原帖
Wa2 但是和答案除顺序外无差别
114181
ChasingAft楼主2022/2/9 16:02

这题貌似也没有对顺序输出要求啊。/kk
我暂且懵在谷里。

#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;
} 
2022/2/9 16:02
加载中...