我这个代码只能拿90分,不知道错哪了,有没有大佬帮忙看一下
查看原帖
我这个代码只能拿90分,不知道错哪了,有没有大佬帮忙看一下
802557
pyiming楼主2023/4/8 10:26
#include <bits/stdc++.h>
using namespace std;

int now[27],a[27],b[27],c[27],d[27],b0,c0,a0;
int op;
char h[100],l[100],r[100];
int first,t[27];
void find(){
	first=0;
	for(int i=1;i<=b0;i++){
		first=max(first,t[b[i]]);
	}
	return;
}
int main(){
	int n;
	scanf("%d\n",&n);
	for(int i=1;i<=n;i++){
		char ch;
		ch=getchar();
		d[i]=ch-'a'+1;
		t[ch-'a'+1]=i;
		now[i]=1;
		a[i]=i; 
	}
	a0=n;
	b0=0;
	c0=0;
	for(int i=n;i>=1;i--){
		//d[i]
//		int temp=now[d[i]];
		switch (now[d[i]]){
			case 1:{
				while(a[a0]!=d[i]){
					if(t[a[a0]]>first){
						h[++op]=a[a0]+'a'-1;
						l[op]='A';
						r[op]='B';
						first=t[a[a0]];
						now[a[a0]]=2;
						b[++b0]=a[a0--];
					}
					else{
						h[++op]=a[a0]+'a'-1;
						l[op]='A';
						r[op]='C';
						now[a[a0]]=3;
						c[++c0]=a[a0--];
					}
				}
				h[++op]=d[i]+'a'-1;
				l[op]='A';
				r[op]='D';
				a0--;
				break;
			}
			case 2:{
				while(b[b0]!=d[i]){
					h[++op]=b[b0]+'a'-1;
					l[op]='B';
					r[op]='C';
					now[b[b0]]=3;
					c[++c0]=b[b0--];
					find();
				}
				h[++op]=d[i]+'a'-1;
				l[op]='B';
				r[op]='D';
				b0--;
				find();
				break;
			}
			case 3:{
				if(c[c0]!=d[i]){
					printf("NO");
					return 0;
				}
				else{
					h[++op]=d[i]+'a'-1;
					l[op]='C';
					r[op]='D';
					c0--;      
				}
				break;
			}
		}
	}
	for(int i=1;i<=op;i++){
		printf("%c %c %c\n",h[i],l[i],r[i]);
	}
	return 0;
}
2023/4/8 10:26
加载中...