#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
struct list{
char add[6];
char next[6];
int key;
};
int main(){
int n, k;
char start[6];
struct list node;
freopen("1.in", "r", stdin);
scanf("%s%d%d", &start, &n, &k);
int i,target = 0;
struct list *a = new struct list[n];
for (i = 0; i < n; i++){
scanf("%s%d%s", &a[i].add, &a[i].key, &a[i].next);
}
int m,j = 0;
if (n%k == 0)
m = n/k;
else m = n/k + 1;
stack<struct list> *s = new stack<struct list> [m];
while (strcmp(start, "-1")){
for (i = 0; i < n;i++)
if (strcmp(a[i].add, start) == 0){
strcpy(start, a[i].next);
s[j].push(a[i]);
if (s[j].size() == k)
j++;
}
}
stack<struct list>s1;
if (s[m - 1].size() < k){
while (s[m-1].size()){
node = s[m-1].top();
s[m-1].pop();
s1.push(node);
}
}
for (i = 0; i < m;i++)
if (i == m - 1 && s1.size())
{
while (s1.size()){
node = s1.top();
s1.pop();
printf("%s %d ", node.add, node.key);
if (s1.size()){
node = s1.top();
printf("%s\n", node.add);
}
else printf("-1\n");
}
}
else {
while (s[i].size()){
node = s[i].top();
s[i].pop();
printf("%s %d ", node.add, node.key);
if (!s[i].size())
if (i == m - 1)
printf("-1\n");
else {
if (i + 1 == m - 1 && s1.size())
node = s1.top();
else node = s[i + 1].top();
printf("%s\n", node.add);
}
else{
node = s[i].top();
printf("%s\n", node.add);
}
}
}
return 0;
}
PAT(A) 1074(同PAT(B) 1025)
最新推荐文章于 2022-03-31 12:08:15 发布