NBUT 1114 Alice's Puppets
东方系列的题目。。。一开始想复杂了,还用深搜结果超时。直接暴力一个个存进去就好了
记得最后要按字典序排序一下。最后还因为这个WA了次。。
#include <algorithm>
using namespace std;
#include <stdio.h>
#include <string.h>
int cmp(const void *elem1,const void *elem2)
{
return(strcmp((char*)elem1,(char*)elem2));
}
int n;
char a[1005][25], b[1005][25];
int vis[1005];
struct Q
{
char name[1005][25];
int name_num;
} lv[1005];
int main()
{
int i, j;
while (scanf("%d", &n) != EOF)
{
getchar();
int num = n;
memset(lv, 0, sizeof(lv));
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(vis, 0, sizeof(vis));
strcpy(lv[0].name[0], "Alice");
lv[0].name_num ++;
for (i = 0; i < n; i ++)
{
scanf("%s%s", a[i], b[i]);
}
int t = 0;
while( num )
{
for (i = 0; i < lv[t].name_num ; i ++)
{
for (j = 0; j < n; j ++)
{
if (strcmp(lv[t].name[i], b[j]) == 0 && vis[j] == 0)
{
vis[j] = 1;
strcpy(lv[t + 1].name[lv[t+1].name_num ++], a[j]);
num --;
}
}
}
t ++;
}
for (i = 1; i <= n; i++)
{
qsort(lv[i].name,lv[i].name_num,sizeof(lv[i].name[0]),cmp);
}
for (i = 1; i <= n; i ++)
{
for (j = 0; j < lv[i].name_num; j ++)
{
printf("%s %d\n", lv[i].name[j], i);
}
}
}
return 0;
}