T^T 70分求调 在线等,挺急的 T^T
查看原帖
T^T 70分求调 在线等,挺急的 T^T
1021055
gdz0214_and_zxb0214楼主2024/10/21 15:11

感谢观看QWQ

#include<bits/stdc++.h>
using namespace std;
struct k{
	int start;
	int end;
	int size;
	int lx;
	int syf;
}s[200010];
int sy[200010],cnt=0;
int main(){
	//freopen("fruit.in","r",stdin);
	//freopen("fruit.ans","w",stdout);
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",sy+i);
		if(i>0){
			if(sy[i]==sy[i-1]){
				s[cnt].end++;
				s[cnt].size++;
			}else{
				s[++cnt].start=i;
				s[cnt].end=i+1;
				s[cnt].size=1;
				s[cnt].lx=sy[i];
				s[cnt].syf=1;
			}
		}else{
			s[++cnt].start=i;
			s[cnt].end=i+1;
			s[cnt].size=1;
			s[cnt].lx=sy[i];
			s[cnt].syf=1;
		}
	}
	int flag;
	do{
		flag=0;
		for(i=1;i<=cnt;i++){
			if(s[i].syf==0){
				continue;
			}
			flag=1;
			sy[s[i].start]=-1;
			printf("%d ",s[i].start+1);
			int first=1;
			s[i].size=0;
			s[i].end=s[i].end;
			for(int j=s[i].start;j<s[i].end;j++){
				if(sy[j]!=-1){
					if(first){
						first=0;
						s[i].start=j;
					}
					s[i].size++;
				}
			}
			int f=-1;
			if(s[i].size==0){
				s[i].syf=0;
			}
			for(int j=i-1;j>=1;j--){
				if(s[j].syf){
					if(s[j].lx==s[i].lx){
						f=j;
					}
					break;
				}
			}
			if(f!=-1){
				int first=1;
				s[f].size=0;
				s[f].end=s[i].end;
				for(int j=s[f].start;j<s[f].end;j++){
					if(sy[j]!=-1){
						if(first){
							first=0;
							s[f].start=j;
						}
						s[f].size++;
					}
				}
				s[i].syf=0;
			}
		}
		printf("\n");
	}while(flag);
	//fclose(stdin);
	//fclose(stdout);
	return 0;
}

T^T感谢调整

2024/10/21 15:11
加载中...