写炸求助
  • 板块UVA200 Rare Order
  • 楼主Reply_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/25 21:28
  • 上次更新2024/2/26 13:29:34
查看原帖
写炸求助
373530
Reply_楼主2024/2/25 21:28

样例通过

#include<bits/stdc++.h>
#define ll long long
#define R register
#define F(i,a,b) for(int i = (a);i<=(b);i++)
using namespace std;
inline int read(){R int x=0,t=1;R char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') t=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*t;}
const int N=10010;
string last,s;
vector<int>g[N];
int d[N];
bool f[N];
inline void add(int ui,int vi)
{
	g[ui].push_back(vi);
	return;
}
inline void topu()
{
	queue<int>q;
	F(i,1,30){
		if(g[i].size()) f[i]=1;
		for(int j = 0;j<g[i].size();j++){
			d[g[i][j]]++;
		}
	}
	F(i,1,30){
		if(f[i]==1 && d[i]==0){
			q.push(i);
		}
	}
	for(;q.size();){
		int u=q.front();
		q.pop();
		printf("%c",u+'A'-1);
		for(int i = 0;i<g[u].size();i++){
			int v=g[u][i];
			d[v]--;
			if(d[v]==0) q.push(v);
		}
	}
	return;
}
inline void solve()
{
	cin >> last;
	for(;;){
		cin >> s;
		if(s=="#") break;
		for(int i = 0;i<min(last.size(),s.size());i++){
			if(last[i]!=s[i]){
				add(last[i]-'A'+1,s[i]-'A'+1);
	//			printf("%c %c\n",last[i],s[i]);
				break;
			}
		}
		last=s;
	}
	topu();
}
signed main()
{
	solve();
	return 0;
}



2024/2/25 21:28
加载中...