10分,其他全RE!求99
查看原帖
10分,其他全RE!求99
541907
QwQ__楼主2022/8/11 11:04
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
struct node{
	int sum,id;//值,编号 
};
int n;
node a[maxn],b[maxn];
int vis[maxn];
int main(){
	scanf("%d",&n);int t=n;
	for(int i=1;i<=n;i++){
    	scanf("%d",&a[i].sum);
    	a[i].id=i;
	} 
	int opo=n,cnt=0;
	b[1].id=a[1].id;
	while(opo>1){
		if(a[1].id!=0) {
		    printf("%d ",a[1].id);opo--;
			vis[a[1].id]=1;//第一个一定出 
		}
		for(int i=1;i<=n-1;i++){
			if(a[i].sum!=a[i+1].sum){
	    		opo--;
	    		if(a[i+1].id!=0) {
	    			printf("%d ",a[i+1].id);
	    			vis[a[i+1].id]=1;
				}//不一致,输出 
			}
			else{
				cnt++;
				b[cnt].sum=a[i+1].sum;
				b[cnt].id=a[i+1].id;
			}//存下好的 
		}n=cnt;//换长度 
		for(int i=1;i<=n;i++){
			a[i].sum=b[i].sum;
			a[i].id=b[i].id;//得到新数组 
    	}memset(b,0,sizeof(b));//b清空 
		printf("\n");
	}
	for(int i=1;i<=t;i++){
		if(vis[i]==0){
			printf("%d",i);//把没输的输了 
		}
	}
	return 0;
}
2022/8/11 11:04
加载中...