zoukankan      html  css  js  c++  java
  • Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction

    题意:给出各个字符串出现的起始位置,问整个的字符串是什么,(字典序最小)

    思路:开始写的是用set+优先队列存取每个位置出现的最长字符串,然后遍历,爆内存。。。爆。。。内。。。存。。。我们可以用并查集,已经确认的位置他们并在一起,指向后面第一个没有被确认的(看代码理解吧)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=2e6+10;
     4 
     5 int n,fa[N];
     6 char s[N],b[N];
     7 
     8 int Find(int x) { return fa[x]==x ? x : fa[x]=Find(fa[x]); }
     9 int main(){
    10     int k;
    11     scanf("%d",&n);
    12     for(int i=1;i<=2000000;i++) {
    13         fa[i]=i;b[i]='a';
    14     }
    15     int Max=0,x;
    16     for(int i=1;i<=n;i++){
    17         scanf("%s%d",s+1,&k);
    18         int len=strlen(s+1);
    19         for(int j=1;j<=k;j++){
    20            scanf("%d", &x);
    21             Max=max(Max, x+len-1);
    22             int y=x;
    23             while(y <= x+len-1)
    24             {
    25                 b[y]=s[y-x+1];
    26                 fa[y]=y+1;y=Find(y);
    27             }
    28         }
    29     }
    30 
    31     for(int i=1;i<=Max;i++) putchar(b[i]);
    32     printf("
    ");
    33 }
  • 相关阅读:
    flask项目部署
    FastDFS分布式文件系统
    《app》团队冲刺二
    《APP》团队开发一
    软工二年级团队项目----自律小助手
    团队项目新闻app的需求分析
    团队成员及团队项目
    团队冲刺第八天
    团队冲刺第七天
    团队冲刺第六天
  • 原文地址:https://www.cnblogs.com/hhxj/p/7158078.html
Copyright © 2011-2022 走看看