Codeforces Round #445 div.2 D. Restoration of string 乱搞

 2023-09-10 阅读 18 评论 0

摘要:D. Restoration of string 题意:给你n个字符串,让你构造一个终串,使得这n个字符串都是终串的最小频繁子串,如果不存在输出NO。 最频繁子串:出现次数最多的子串 怎么爬codeforces的数据,tags: 直接暴力怼?? #include

D. Restoration of string

题意:给你n个字符串,让你构造一个终串,使得这n个字符串都是终串的最小频繁子串,如果不存在输出NO。  最频繁子串:出现次数最多的子串

怎么爬codeforces的数据,tags: 直接暴力怼??

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a; i<=b; ++i)
#define per(i,b,a) for (int i=b; i>=a; --i)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MP make_pair
#define PB push_back
#define fi  first
#define se  second
typedef long long ll;
const int N = 200005;int n, in[28];
char s[N];
bool vis[28], used[28];
vector< int > G[N];
void print(int x)
{putchar('a'+x);vis[x] = true;if(G[x].size()==1)print(G[x][0]);
}
bool check(int x)
{if(vis[x]) return false;vis[x]=true;if(G[x].size()==1)return check(G[x][0]);return true;
}
int main()
{scanf("%d", &n);rep(i,1,n){scanf("%*c%s", s+1);mes(vis, false);for(int j=1; s[j]; ++j){int id = s[j]-'a';if(vis[id]) return 0*printf("NO\n");vis[id]=true, used[id]=true;if(j>1) {if(G[s[j-1]-'a'].size()==1 && G[s[j-1]-'a'][0]==s[j]-'a')continue;G[s[j-1]-'a'].PB(s[j]-'a');++in[s[j]-'a'];}if(G[s[j-1]-'a'].size()>1 || in[s[j]-'a']>1)return 0*printf("NO\n");}}mes(vis, false);rep(i,0,25)if(used[i]) {mes(vis, false);if(!check(i)) return 0*printf("NO\n");}mes(vis, false);rep(i,0,25)if(used[i] && !vis[i] && in[i]==0)print(i);puts("");return 0;
}

转载于:https://www.cnblogs.com/sbfhy/p/7832604.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/36982.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息