HRBUST-1022 JiaoZhu and SC(C语言)

 

JiaoZhu and SC
Time Limit: 1000 MSMemory Limit: 65536 K
Total Submit: 1217(401 users)Total Accepted: 498(365 users)Rating: Special Judge: No
Description

自从电子竞技在中国被认定为第99个正式体育项目,教主就投身其中,SC(StarCraft 星际争霸)他拿手的一款游戏,当然也有很多职业选手参与其中。
星际争霸中有3个种族:T(人族),P(神族),Z(虫族)而且每个玩家必须选择且只能选择一个种族来使用。
在职业电子竞技联赛中,每位职业选手都会固定使用某一个自己喜爱的种族。
在经过大量的比赛后,发现有如下的规律:
1.使用人族的选手总是能战胜虫族选手
2.使用虫族的选手总是能战胜神族选手
3.使用神族的选手总是能战胜人族选手
4.使用相同种族的选手对战总是产生平局
现在将告诉你每个选手的种族,并进行若干场比赛,要求你输出每场比赛的结果。

Input

本题只有一组测试数据
第一行:N M (1 <= N, M<= 10000),N代表选手的数目,M代表比赛的场数。
接下来N行,每行首先给出选手名字(玩家的名字只由大写、小写字母、数字组成,其中没有空格,最长的名字占10个字符)接着是他的种族(用T、P、Z表示)
接下来M行,每行代表一场比赛,首先给出选手A的名字,接着给出选手B的名字。

Output

对于每场比赛:
选手A胜利 输出"XiaoM Wins!"
选手B胜利 输出"TianT Wins!"
平局 输出"End in a draw!"

Sample Input

4 4
JiaoZhu T
Jaedong Z
Chadalt T
LMJ Z
JiaoZhu Chadalt
Jaedong LMJ
JiaoZhu LMJ
LMJ Chadalt

Sample Output

End in a draw!
End in a draw!
XiaoM Wins!
TianT Wins!

Hint

输入量巨大,建议使用scanf()与printf(),使用cin与cout可能会超时

Author
Chadalt

 由于输入主体是一个字符串和一个字符,故采用结构体会比较方便

AC代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
struct sc {                     //采用结构体,分别存储选手名字和种族
	char name[10];
	char c;
};
int main()
{
	int n, m;              //n代表选手的数目,m代表比赛的场数
	while (scanf("%d%d", &n, &m) != EOF) {
		getchar();
		struct sc * race = (struct sc *)malloc(n * sizeof(struct sc)); 
		for (int i = 0; i < n; i++)
			scanf("%s %c", race[i].name, &race[i].c);          //输入n个选手的名字及对应的种族
		for (int k = 0; k < m; k++) {
			char s1[10], s2[10];
			scanf("%s %s", s1, s2);                 //选手a和b的名字
			for (int i = 0; i < n; i++) {
				if (!strcmp(s1, race[i].name)) {             //如果选手a是某个选手
					for (int j = 0; j < n; j++) {            
						if (!strcmp(s2, race[j].name)) {       //找到选手b对应的选手
							//对于每场比赛:
							//	选手A胜利 输出"XiaoM Wins!"
							//	选手B胜利 输出"TianT Wins!"
							//	平局 输出"End in a draw!"

							// 1.使用人族的选手总是能战胜虫族选手
							//	2.使用虫族的选手总是能战胜神族选手
							//	3.使用神族的选手总是能战胜人族选手

							//如果选手a满足这三种情况,输出“XiaoM Wins!”
							if (race[i].c == 'T' && race[j].c == 'Z') { printf("XiaoM Wins!\n"); break; }
							else if (race[i].c == 'Z' && race[j].c == 'P') { printf("XiaoM Wins!\n"); break; }
							else if (race[i].c == 'P' && race[j].c == 'T') { printf("XiaoM Wins!\n"); break; }

							//4.使用相同种族的选手对战总是产生平局 
							else if (race[i].c == race[j].c) { printf("End in a draw!\n"); break; }

							//不满足以上四种情况,输出“TianT Wins!”
							else { printf("TianT Wins!\n"); break; }
						}
					}
				}
			}
		}
	}
	return 0;
}

 

 PS:好久没写博客了,这段时间太忙了

2018.11.08  00:09 写于寝室

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值