代码思路完全正确,只不过删除顺序不同。
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct P{
int id1,id2;
};
struct C{
int id1,id2,id3;
};
void solve(){
string s;
cin>>s;
vector<int> a;
vector<P> p;
vector<C> c;
for(int i=0;i<s.size();i++){
if(s[i]=='A')a.push_back(i);
if(s[i]=='P'&&a.size()){
p.push_back({a[a.size()-1],i});
a.pop_back();
}
if(s[i]=='C'&&p.size()){
c.push_back({p[p.size()-1].id1,p[p.size()-1].id2,i});
p.pop_back();
}
}
bitset<3000005> no;
for(C i:c){
no[i.id1]=1,no[i.id2]=1,no[i.id3]=1;
}
bool ll=0;
for(int i=0;i<s.size();i++){
if(!no[i])putchar(s[i]),ll=1;
}
if(!ll)cout<<"Perfect";
cout<<endl<<c.size()<<endl;
for(C i:c){
cout<<i.id1+1<<" "<<i.id2+1<<" "<<i.id3+1<<endl;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--)solve();
return 0;
}