• Uva 1610 Party Games


    Thinking about it:

      刚开始思考的时候,脑子里就觉得这道题可能有很多情况,刚开始就因为考虑不周全wa了。

      后来换了一种思路,如果不能马上就直接得到答案,就一个一个字母去尝试。这样子就有点类似dfs了,比如 名字排序后排在中间的z字符串是 s1,,s2,那么第i位的字母肯定介于 s1[i] 和 s2[i] 之间,然后先判断在这里填一个字母能否得出答案。这里需注意:不能填了一个字母后就立马搜索下一个情况,因为题目首先要求是最短,所以要在不填下一个字母的情况下,把这个位置可能的字母都填上试试。发现必须要再填下一个字母时,才开始填写下一个字母。

    PS:

      AC后看了看网上的题解,大多是多个if分析各种情况,这样确实更直接。但在分析不清时,可以考虑一下搜索。另,思考问题时,最好先在纸上写点想法,书写过程中很有可能带来灵感!

    Code:

    /**
     * AC @ Sep 9th 2015
     * Run Time : 0.000s
     */
    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int MAXN = 1000 + 50;
    string name[MAXN], ans;
    int N;
    
    bool read() {
        cin >> N;
        if (!N) {
            return false;
        }
        for (int i = 0; i < N; ++i) {
            cin >> name[i];
        }
        return true;
    }
    
    bool dfs(int pos) {
        ans.append(1, '0');
        char start, limit;
        start = pos < name[N/2-1].length() ? name[N/2-1][pos] : 'A';
        limit = pos < name[N/2].length() ? name[N/2][pos] : 'Z';
        for (char c = start; c<=limit; ++ c) {
            ans[ans.length()-1] = c;
            if (ans >= name[N/2-1] && ans < name[N/2]) {
                return true;
            }
        }
        for (char c = start; c<=limit; ++ c) {
            ans[ans.length()-1] = c;
            if (dfs(pos + 1)) {
                return true;
            }
        }
        return false;
    }
    
    void work() {
        ans = "";
        sort(name, name + N);
        dfs(0);
        cout << ans << endl;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        while (read()) {
            work();
        }
        return 0;
    }
    /**
     * Test case:
    4
    ACB 
    ABC
    ABB
    ACC
    2
    ABAB
    ABB
    2 
    ABABC
    ABB
     */
    

      

  • 相关阅读:
    Arduino-原理图标识
    python-垃圾回收机制
    利用浮力测密度
    sys模块-与python解释器交互的模块
    第十一章第二节 功率
    第十一章第一节 功
    类-描述器-把类对象方法转变为属性方式
    H5浏览器播放RTMP直播流
    如何查看某个端口被谁占用
    OBS第三方推流直播教程
  • 原文地址:https://www.cnblogs.com/Emerald/p/4796257.html
Copyright © 2020-2023  润新知