标签:
题意: 给出一系列字符串,构造出一个最短字符串(可以不在集合中)大于等于其中的一半,小于另一半。
析:首先找出中间的两个字符串,然后暴力找出最短的字符串,满足题意。
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <algorithm> 5 #include <cstdio> 6 7 using namespace std; 8 vector<string> v; 9 10 int main(){ 11 // freopen("in.txt", "r", stdin); 12 int n; 13 while(scanf("%d", &n) && n){ 14 v.clear(); 15 string s; 16 for(int i = 0; i < n; ++i){ 17 cin >> s; 18 v.push_back(s); 19 } 20 21 sort(v.begin(), v.end()); 22 int len = v.size(); 23 string s1 = v[len/2 - 1];//找出中间的两个 24 string s2 = v[len/2]; 25 26 len = s1.size(); 27 int p = 0; 28 string ans = "A"; 29 while(p < len){//暴力求解最短的 30 while(ans[p] <= ‘Z‘ && ans < s1) ++ans[p]; 31 if(ans[p] <= ‘Z‘ && ans >= s1 && ans < s2) break; 32 if(ans[p] != s1[p]) --ans[p]; 33 ans += ‘A‘; 34 ++p; 35 } 36 cout << ans << endl; 37 } 38 return 0; 39 }
标签:
原文地址:http://www.cnblogs.com/dwtfukgv/p/5517482.html