rt,我要崩溃了,这个到底哪里有问题,为什么交到判题机上显示样例都过不了(它的输出是正确的)。
#include<bits/stdc++.h>
using namespace std;
int t,a[1000005],topa,b[1000005],topb,c[1000005],topc,top;
struct node{
int x,y,z;
}f[1000005];
char s[1000005];
int read(){
int sum=0;
char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) sum=sum*10+(c-'0'),c=getchar();
return sum;
}
bool flag[1000005];
int main(){
t=read();
while(t--){
int n=0;
while(s[n]!='\n') s[++n]=getchar();
n--,topa=topb=topc=top=0;
for(int i=1;i<=n;i++) flag[i]=1;
for(int i=1;i<=n;i++){
if(s[i]=='A') a[++topa]=i;
if(s[i]=='P') b[++topb]=i;
if(s[i]=='C') c[++topc]=i;
}
while(topa!=0&&topb!=0&&topc!=0){
while(b[topb]>c[topc]&&topb!=0) topb--;
while(a[topa]>b[topb]&&topa!=0) topa--;
if(topa!=0&&topb!=0)
f[++top]={a[topa],b[topb],c[topc]},
flag[a[topa]]=flag[b[topb]]=flag[c[topc]]=0,
topa--,topb--,topc--;
}
bool ff=0;
for(int i=1;i<=n;i++) if(flag[i]) printf("%c",s[i]),ff=1;
if(!ff) printf("Perfect");
printf("\n%d\n",top);
for(int i=1;i<top;i++) printf("%d %d %d\n",f[i].x,f[i].y,f[i].z);
printf("%d %d %d",f[top].x,f[top].y,f[top].z);
if(t>1) printf("\n");
}
return 0;
}