• CF861D


    题目链接:http://codeforces.com/contest/861/problem/D

    解题思路:

      优雅的暴力。

      对于输入的每一个号码,从短到长找出它的所有子串,用 vector 保存每个号码对应的所有子串,用 map 为所有子串做标记,输出答案的时候只需要按输入顺序遍历每个号码,遍历它保存在 vector 里面的所有子串,找出可行解即可。

    AC代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int maxn = 70000+5;
     5 const int inf = 0x7fffffff;
     6 map<string,int> num_p;
     7 string num;
     8 vector<string> subnum[maxn];
     9 int main(){
    10     ios::sync_with_stdio(false);
    11     int n;
    12     bool can;
    13     cin>>n;
    14     for(int t=1;t<=n;t++){
    15         cin>>num;
    16         for(int i=1;i<=9;i++){
    17             for(int j=0;j<=9-i;j++){
    18                 string temp=num.substr(j,i);
    19                 if(num_p[temp]==0){
    20                     num_p[temp]=t;
    21                     subnum[t].push_back(temp);
    22                 }
    23                 else if(num_p[temp]!=t) num_p[temp]=-1;     //有多个号码有这个子串,-1表示不可用
    24             }
    25         }
    26     }
    27     for(int t=1;t<=n;t++){
    28         for(int i=0;i<subnum[t].size();i++){
    29             if(num_p[subnum[t][i]]==t){
    30                 cout<<subnum[t][i]<<endl;
    31                 break;
    32             }
    33         }
    34     }
    35 
    36     return 0;
    37 }
    “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”
  • 相关阅读:
    codeforces 505E Mr. Kitayuta vs. Bamboos 题解
    codeforces 568C New Language 题解
    [AGC020E] Encoding Subsets 题解
    技巧瞎扯
    [AGC028C] Min Cost Cycle 题解
    [AGC018D] Tree and Hamilton Path 题解
    codeforces 1217D Coloring Edges 题解
    [AGC003C] BBuBBBlesort! 题解
    [AGC037C] Numbers on a Circle 题解
    [USACO09Open] Tower of Hay 题解
  • 原文地址:https://www.cnblogs.com/Blogggggg/p/7545284.html
Copyright © 2020-2023  润新知