• POJ-3080 Blue Jeans---字符串+暴力


    题目链接:

    https://vjudge.net/problem/POJ-3080

    题目大意:

    找最长的公共字串(长度>=3),长度相同就找字典序最小的

    解题思路:

    枚举第一个串的所以子串,处理出其他串的所有子串,然后set查找,更新ans

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<set>
     4 #include<string>
     5 using namespace std;
     6 int T;
     7 set<string>tot[12];
     8 int main()
     9 {
    10     cin >> T;
    11     while(T--)
    12     {
    13         int n;
    14         string s, s1;
    15         cin >> n;
    16         cin >> s;
    17         for(int i = 1; i < n; i++)
    18         {
    19             cin >> s1;
    20             tot[i].clear();
    21             for(int len = 3; len <= s1.size(); len++)
    22             {
    23                 for(int start = 0; start + len <= s1.size(); start++)
    24                 {
    25                     int end = start + len;
    26                     string s2;
    27                     for(int j = start; j < end; j++)
    28                         s2 += s1[j];
    29                     tot[i].insert(s2);
    30                 }
    31             }
    32         }
    33         string ans = "";
    34         for(int len = 3; len <= s.size(); len++)
    35         {
    36             for(int start = 0; start + len <= s.size(); start++)
    37             {
    38                 int end = start + len;
    39                 string s2;
    40                 for(int i = start; i < end; i++)
    41                     s2 += s[i];
    42                 bool flag = 1;
    43                 for(int i = 1; i < n; i++)
    44                 {
    45                     if(!tot[i].count(s2))
    46                     {
    47                         flag = 0;
    48                         break;
    49                     }
    50                 }
    51                 if(flag)
    52                 {
    53                     if(s2.size() > ans.size())
    54                     {
    55                         ans = s2;
    56                     }
    57                     else if(s2.size() == ans.size() && ans > s2)
    58                     {
    59                         ans = s2;
    60                     }
    61                 }
    62             }
    63         }
    64         if(ans.size() < 3)cout<<"no significant commonalities"<<endl;
    65         else cout<<ans<<endl;
    66     }
    67 }
  • 相关阅读:
    社保系列10《返回值速查表》
    社保系列7《PSAM卡》
    EMVTag系列11《电子现金发卡行授权码》
    EMVTag系列10《发卡行公钥证书》
    EMVTag系列8《IC卡公钥证书》
    EMVTag系列5《8E 持卡人验证方法(CVM)列表》
    康托展开
    A*搜索 概念
    code1225 搭积木
    code1064 虫食算
  • 原文地址:https://www.cnblogs.com/fzl194/p/8923370.html
Copyright © 2020-2023  润新知