三国杀问题,连续查找问题(怎么提高运算速度)
5197: 三国杀Input
这里的势力只有3个,也就是君主只有三个,层归到君主结束。多组测试数据,每组测试数据以cnt开始,表示关系个数,接着cnt行,每个关系两个名字用空格分隔,如张辽 司马懿,表示张辽是司马懿的下属,接着k个询问总数,接着k行,每行一个名字,表示要求的层归序列。
Output
输出层归序列,每个询问一行。
Sample Input
21
司马懿 曹操
张辽 司马懿
郭嘉 曹操
杨修 郭嘉
夏侯渊 张辽
于禁 夏侯渊
诸葛亮 刘备
黄月英 诸葛亮
关羽 刘备
张飞 关羽
赵云 诸葛亮
马超 刘备
姜维 诸葛亮
甘宁 周瑜
吕蒙 周瑜
曹仁 曹操
黄盖 周瑜
黄忠 黄月英
周泰 周瑜
周瑜 孙权
陆逊 孙权
12
于禁
陆逊
黄盖
张辽
黄月英
诸葛亮
曹仁
周泰
周瑜
马超
姜维
夏侯渊
Sample Output
于禁,夏侯渊,张辽,司马懿,曹操
陆逊,孙权
黄盖,周瑜,孙权
张辽,司马懿,曹操
黄月英,诸葛亮,刘备
诸葛亮,刘备
曹仁,曹操
周泰,周瑜,孙权
周瑜,孙权
马超,刘备
姜维,诸葛亮,刘备
夏侯渊,张辽,司马懿,曹操
大家能否给点经验,怎么提高运算速度,因为ACM平台很坑,时间容易超限,谢谢你们
我的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[100][50], str2[100][50];
char arr[100][50];
int n, i, m, j;
int flag=1, k=0, l=0, leap=0;
while(scanf("%d", &n)!=EOF)
{
for(i=0; i<n; i++)
scanf("%s %s", str1[i], str2[i]);
scanf("%d", &m);
for(i=0; i<m; i++)
scanf("%s", arr[i]);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
if(strcmp(arr[i], str1[j])==0&&flag==1)
{
printf("%s,%s", arr[i], str2[j]);
flag = 0;
k=j;
j=0;
leap++;
if(leap==0)
{
printf("%s", arr[i]);
break;
}
}
if(strcmp(str2[k],str1[j])==0&&flag==0)
{
printf(",%s", str2[j]);
k=j;
j=-1;
}
}
printf("\n");
flag = 1;
leap=0;
}
}
return 0;
}