代码如下:
#include<bits/stdc++.h>
using namespace std;
char a[9999999],b[9999999];
long long len;
bool t=0,u=0,s=0;
bool error(string b,long long l){
long long ts=0,fs=0;
for(long long i=0;i<l;i++){
if(b[i]=='t')ts++;
if(b[i]=='f')fs++;
}
if(ts==0&&fs==0)return 0;
if(b[l-1]=='o'||b[l-1]=='a')return 0;
for(long long i=1;i<l;i++){
if((b[i]=='n'&&(b[i+1]=='a'||b[i+1]=='o'))||((b[i]=='a'||b[i]=='o')&&(b[i+1]=='a'||b[i+1]=='o'||(b[i-1]=='a'||b[i-1]=='o')))){
return 0;
}
}
return 1;
}
void cnot(){
for(long long i=0;i<len;i++){
if(b[i]=='n'){
long long w=1;
while(b[i]!='n'){
w++;
i++;
}
if(w%2==0)b[i]=' ';
else{
b[i]=' ';
if(b[i+1]=='f')b[i+1]='t';
else if(b[i+1]=='t')b[i+1]='f';
}
}
}
}
void cand(){
for(long long i=0;i<len;i++){
if(b[i]=='a'){
b[i]=' ';
char q,h;
int j,k;
for(j=i;;j++){
if(b[j]=='f'||b[j]=='t'){
h=b[j];
break;
}
}
for(k=i;;k--){
if(b[k]=='f'||b[k]=='t'){
q=b[k];
break;
}
}
if(q=='f'||h=='f'){
b[k]='f';
b[j]=' ';
}
else{
b[k]='t';
b[j]=' ';
}
}
}
}
void cor(){
for(long long i=0;i<len;i++){
if(b[i]=='o'){
b[i]=' ';
char q,h;
int j,k;
for(j=i;;j++){
if(b[j]=='f'||b[j]=='t'){
h=b[j];
break;
}
}
for(k=i;;k--){
if(b[k]=='f'||b[k]=='t'){
q=b[k];
break;
}
}
if(q=='f'&&h=='f'){
b[k]='f';
b[j]=' ';
}
else{
b[k]='t';
b[j]=' ';
}
}
}
}
int main(){
cin.getline(a,9999999);
len=strlen(a);
if(a[0]=='a'||a[0]=='o'||a[len-1]=='a'||a[len-1]=='o'||a[len-1]=='n'){
cout<<"error";
return 0;
}
for(long long i=0,j=0;i<len;i++){
if(!t){
t=1;
b[j++]=a[i];
}
if(a[i]==' ')t=0;
}
len=strlen(b);
if(!error(b,len)){
cout<<"error";
return 0;
}
cnot();
cand();
cor();
len=strlen(b);
for(long long i=0;i<len;i++){
if(u==1&&(b[i]=='t'||b[i]=='f')){
cout<<"error";
return 0;
}
if(b[i]=='t'&&u==0){
s=1;
u=1;
}
if(b[i]=='f'&&u==0){
s=0;
u=1;
}
}
if(s==1)cout<<"true";
else cout<<"false";
return 0;
}
``
请大佬们指教!