-
Notifications
You must be signed in to change notification settings - Fork 184
/
Copy path00168.cc
65 lines (65 loc) · 1.19 KB
/
00168.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// https://uva.onlinejudge.org/external/1/168.pdf
#include<bits/stdc++.h>
using namespace std;
using ii=tuple<int,int>;
using vii=vector<ii>;
using vi=vector<int>;
using vvi=vector<vi>;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
for(;;){
string s;
getline(cin,s);
if(s[0]=='#')break;
vii e;
vi m(128);
int n=0,i=0,u,v,w,k;
for(;;){
char x=s[i],y;
if(!m[x])m[x]=++n;
u=m[x]-1;
i++;
for(;s[i]!=';'&&s[i]!='.';i++){
if(s[i]==':')continue;
x=s[i];
if(!m[x])m[x]=++n;
w=m[x]-1;
e.emplace_back(u,w);
}
if(s[i]==';')i++;
else{
stringstream in(s.substr(i+1));
in>>x>>y>>k;
u=m[x]-1;
w=m[y]-1;
break;
}
}
vi r(n);
for(int i=0;i<128;i++)
if(m[i])
r[m[i]-1]=i;
vvi g(n);
for(ii x:e){
tie(i,v)=x;
g[i].push_back(v);
}
vi t(n);
for(i=0;;i++){
int z=u;
for(int v:g[u])
if(v!=w&&!t[v]){
u=v;
break;
}
w=z;
if(w==u)break;
if(i%k==k-1){
t[w]=1;
cout<<char(r[w])<<" ";
}
}
cout<<"/"<<char(r[u])<<"\n";
}
}