zoukankan      html  css  js  c++  java
  • hihocoder1829 Tomb Raider

    思路:

    暴力枚举。

    实现:

     1 #include <iostream>
     2 #include <set>
     3 #include <vector>
     4 using namespace std;
     5 
     6 void get_subseq(string s, string x, int cur, set<string>& st)
     7 {
     8     if (cur == s.length()) { if (x != "") st.insert(x); return; }
     9     get_subseq(s, x + s[cur], cur + 1, st);
    10     get_subseq(s, x, cur + 1, st);
    11 }
    12 
    13 bool is_subseq(string s, string t)
    14 {
    15     int i = 0, j = 0;
    16     while (i < s.length() && j < t.length())
    17     {
    18         if (t[j] != s[i]) j++;
    19         else i++;
    20     }
    21     return i == s.length();
    22 }
    23 
    24 bool check(string s, vector<string> v)
    25 {
    26     for (int i = 1; i < v.size(); i++)
    27     {
    28         bool flg = false;
    29         int l = v[i].length();
    30         for (int j = 0; j < l; j++)
    31         {
    32             string tmp = v[i].substr(j, l - j) + v[i].substr(0, j);
    33             if (is_subseq(s, tmp)) { flg = true; break; }
    34         }
    35         if (!flg) return false;
    36     }
    37     return true;
    38 }
    39 
    40 int main()
    41 {
    42     int n;
    43     string s;
    44     while (cin >> n)
    45     {
    46         vector<string> v;
    47         for (int i = 0; i < n; i++) { cin >> s; v.push_back(s); }
    48         set<string> st;
    49         vector<string> buf;
    50         get_subseq(v[0], "", 0, st);
    51         for (auto it: st)
    52         {
    53             int l = it.length();
    54             for (int i = 1; i < l; i++)
    55             {
    56                 string tmp = it.substr(i, l - i) + it.substr(0, i);
    57                 buf.push_back(tmp);
    58             }
    59         }
    60         for (auto it: buf) st.insert(it);
    61         int maxn = 0; string ans = "zzzzzzzzzz";
    62         for (auto it: st)
    63         {
    64             if (check(it, v) && (it.length() > maxn || (it.length() == maxn && it < ans)))
    65             {
    66                 ans = it;
    67                 maxn = it.length();
    68             }
    69         }
    70         if (ans == "zzzzzzzzzz") cout << 0 << endl;
    71         else cout << ans << endl;
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    洛谷 P2807 三角形计数
    洛谷 P1727 计算π
    洛谷 P1595 信封问题
    洛谷 P3131 [USACO16JAN]子共七Subsequences Summing to Sevens
    3.1、spark集群运行应用
    移动端自适应
    【Flex布局】
    【pm2】
    【安全】
    【Bower】
  • 原文地址:https://www.cnblogs.com/wangyiming/p/9850347.html
Copyright © 2011-2022 走看看