社区讨论

WA,AC必关!

P10032「Cfz Round 3」Mex of Sequence参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@miimaby9
此快照首次捕获于
2025/11/28 16:45
3 个月前
此快照最后确认于
2025/11/29 15:10
3 个月前
查看原帖
自测无误,提交第二个点WA。
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int t,n,m;
pair<int,int> a[N];
int ans1[N],ans2[N],ans3[N];
int p,q;
// first: number; second: in-id
int main() {
	scanf("%d",&t);
	while(t--) {
		scanf("%d%d",&n,&m);
		a[0].first=-1;
		a[0].second=0;
		for(int i=1; i<=n; i++) {
			scanf("%d",&a[i].first);
			a[i].second=i;
		}
		// m=1
		sort(a+1,a+n+1);
		p=n,q=a[n].first;
		for(int i=1; i<=n; i++) {
			if(a[i].first>(a[i-1].first+1)) {
				p=i-1;
				q=a[p].first;
				break;
			}
		}
		for(int i=p+1; i<=n; i++) {
			ans1[a[i].second]=q+1;
		}
		for(int i=1; i<=p; i++) {
			if(a[i].first==a[i-1].first||a[i].first==a[i+1].first) {
				ans1[a[i].second]=q+1;
			} else {
				ans1[a[i].second]=a[i].first;
			}
		}
		// m=2
		for(int i=1;i<=n;i++){
			a[i].first=ans1[i];
			a[i].second=i;
		}
		sort(a+1,a+n+1);
		p=n,q=a[n].first;
		for(int i=1; i<=n; i++) {
			if(a[i].first>(a[i-1].first+1)) {
				p=i-1;
				q=a[p].first;
				break;
			}
		}
		for(int i=p+1; i<=n; i++) {
			ans2[a[i].second]=q+1;
		}
		for(int i=1; i<=p; i++) {
			if(a[i].first==a[i-1].first||a[i].first==a[i+1].first) {
				ans2[a[i].second]=q+1;
			} else {
				ans2[a[i].second]=a[i].first;
			}
		}
		// m=3
		for(int i=1;i<=n;i++){
			a[i].first=ans2[i];
			a[i].second=i;
		}
		sort(a+1,a+n+1);
		p=n,q=a[n].first;
		for(int i=1; i<=n; i++) {
			if(a[i].first>(a[i-1].first+1)) {
				p=i-1;
				q=a[p].first;
				break;
			}
		}
		for(int i=p+1; i<=n; i++) {
			ans3[a[i].second]=q+1;
		}
		for(int i=1; i<=p; i++) {
			if(a[i].first==a[i-1].first||a[i].first==a[i+1].first) {
				ans3[a[i].second]=q+1;
			} else {
				ans3[a[i].second]=a[i].first;
			}
		}
		// m>3
		if(m==1){
			for(int i=1;i<=n;i++){
				printf("%d ",ans1[i]);
			}
			printf("\n");
			continue;
		}
		m%=2;
		m+=2;
		if(m==2){
			for(int i=1;i<=n;i++){
				printf("%d ",ans2[i]);
			}
			printf("\n");
			
		}
		if(m==3){
			for(int i=1;i<=n;i++){
				printf("%d ",ans3[i]);
			}
			printf("\n");
		}
	}
	return 0;
}

回复

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

正在加载回复...