UVA1610(貪心)
阿新 • • 發佈:2019-02-16
題意:
給出n個串(n為偶數);
要構造一個串,使n串中有一半小於等於它,另外一半大於它;
要求這個串長度儘量小,同時字典序小;
思路:
把所有串排個序;
然後拿出中間的兩個串比較;
AC
#include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<iostream> using namespace std; const int N = 1005; string str[N]; string res; int n; int main() { while(scanf("%d",&n) && n) { getchar(); for(int i = 0; i < n; i++) { getline(cin ,str[i]); } sort(str, str + n); string a = str[n / 2 - 1]; string b = str[n / 2]; res = ""; for(int i = 0; i < a.size() && i < b.size(); i++) { if(a[i] == b[i]) res += a[i]; else { if(i == a.size() - 1) { res += a[i]; }else if((b[i] - a[i] > 1) || i != b.size() - 1) { res += (a[i] + 1); }else { res += a[i]; for(int j = i + 1; j < a.size(); j++) { if(j == a.size() - 1) { res += a[j]; break; } if(a[j] != 'Z') { res += (a[j] + 1); break; } res += 'Z'; } } break; } } cout << res << endl; } }