- 病毒(virus)
答案
- @ 2026-3-31 17:30:47
#include<bits/stdc++.h> #include #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 50001 #define MOD 123 #define E 1e-6 using namespace std; int n; int a[N][101],g[27][27]; int enter[27],vis[27],sum[27]; int cnt; int p; void judge(int x,int y) { if(a[x][y]==0||a[x+1][y]==0) return ; if(a[x][y]!=a[x+1][y]) { g[a[x][y]][a[x+1][y]]=1; enter[a[x+1][y]]++; } else judge(x,y+1); } bool topsort() { for(int i=1;i<=27;++i) if(vis[i]) cnt++; for(int i=1;i<n;++i) judge(i,1); int work,temp; while(p!=cnt) { work=0; for(int i=1;i<=cnt;++i) { if(enter[i]==0) { temp=i; enter[i]=-1; work++; } } if(work!=1) return false; sum[++p]=temp; for(int i=1;i<=cnt;++i) { if(g[temp][i]) { g[temp][i]=0; enter[i]--; } } } return true; } int main() { cin>>n; for(int i=1;i<=(n+1);i++) { string str; cin>>str; for(int j=0;j<=str.size()-1;j++) { a[i][++a[i][0]]=int(str[j]+1-'a'); vis[str[j]+1-'a']=1; } }
if(!topsort())
cout<<0;
else
{
for(int i=1;i<=a[n+1][0];++i)
{
for(int j=1;j<=cnt;++j)
{
if(a[n+1][i]==sum[j])
{
cout<<char(j-1+'a');
break;
}
}
}
}
return 0;
}
0 条评论
信息
- ID
- 399
- 时间
- ms
- 内存
- MiB
- 难度
- 6
- 标签
- 递交数
- 87
- 已通过
- 28
- 上传者