UVA 1610 Party Games

来源:互联网 发布:游戏算法书籍 编辑:程序博客网 时间:2024/05/16 18:48

题意:输入一个n个字符串的集合D,找一个长度最短的字符串(不一定在D中出现)S,使得D中恰好一半串小于等于S,另一半大于S。如果有多解输出字典序最小的解

解题思路:要搞清楚细节处理,先排序找出中间的两个串,再设一个空串,每次循环后空串加一个S1中的字母,再循环判断26个字母,如果符合条件直接输出,它就是字典序最小的那个串

代码:

#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <vector>using namespace std;vector<string> v;int main(){    int n;    while(cin>>n&&n)    {        v.clear();        string s;        for(int i=0;i<n;i++)        {            cin>>s;            v.push_back(s);        }        sort(v.begin(),v.end());        int k=n/2;        string s1=v[k-1],s2=v[k];        string s0="",temp;        int flag=0,cur=0;        while(1)        {            for(int i=0;i<26;i++)            {                temp=s0;                temp+=i+'A';                if(temp>=s1&&temp<s2)                {                    flag=1;                    cout<<temp<<endl;                    break;                }            }            if(flag)break;            s0+=s1[cur++];        }    }    return 0;}


原创粉丝点击