BNU 比赛!http://www.bnuoj.com/v3/problem_show.php?pid=44586 #include<stdio.h> #include<string.h> #define mnum 100020 using namespace std; char str[mnum],ans[mnum]; int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int t; scanf("%d",&t); while(t--) { scanf("%s",str); ans[0]=str[0];int len=strlen(str); int cur=1; for(int i=1;i<len;i++) { if(str[i]%2) { if(str[i]==ans[cur-1]-1) cur--; else { ans[cur++]=str[i]; } } else { if(str[i]==ans[cur-1]+1) cur--; else { ans[cur++]=str[i]; } } } ans[cur]='\0'; if(!cur) printf("sad!\n"); else printf("%s\n",ans); } return 0; } --------------------超时的代码-----------------------------#include<stdio.h> #include<string.h> #define mnum 100020 using namespace std; char str[mnum],ans[mnum]; int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); int t; scanf("%d",&t); while(t--) { scanf("%s",str); ans[0]=str[0]; int cur=1; for(int i=1;i<strlen(str);i++) //strlen(str)会被调用strlen(str)次,所以当长度很大时,这个影响很大! { if(str[i]%2) { if(str[i]==ans[cur-1]-1) cur--; else { ans[cur++]=str[i]; } } else { if(str[i]==ans[cur-1]+1) cur--; else { ans[cur++]=str[i]; } } } ans[cur]='\0'; if(!cur) printf("sad!\n"); else printf("%s\n",ans); } return 0; }