不知道为什么把这道题放在高效里,我这一点也不高效的方法居然也跑了0.016s
我们需要做的很简单,挨个字符的选择,然后先加上这个字符,和所有字符串比较一遍,根据大于它和小于它的字符串个数进行判断就好了 。 注意z这个字符 ,对于某些数据,会TLE的。。。
没什么意思,直接看代码吧:
#include<bits/stdc++.h> using namespace std; const int maxn = 10000 + 5; int n,cnt[maxn]; char ans[35],s[maxn][35]; int main() { while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) { scanf("%s",s[i]); cnt[i] = strlen(s[i]); } int rear = 0; bool ok = false; while(!ok) { for(int j=0;j<26;j++) { int c = 0; char v = j + 'A'; for(int i=1;i<=n;i++) { ans[rear] = '\n'; if(rear+1 > cnt[i] && strcmp(ans,s[i]) >= 0) { c++; continue; } else { ans[rear] = v; ans[rear+1] = '\n'; if(strcmp(ans,s[i])>=0) c++; } } if(v == 'Z'&&c<n/2) { ans[rear++] = v; break; } if(c == n/2) { ans[rear++] = v; ok = true; break; } if(c < n/2) continue; if(c > n/2) { ans[rear++] = v-1; break; } } if(ok) break; } for(int i=0;i<rear;i++) printf("%c",ans[i]); printf("\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/weizhuwyzc000/article/details/47010069