【HPU】[1441] 王小二的游戏之二 HPU1441

点此尝试本题

题目描述

王小二酷爱玩游戏,王者荣耀,剑三,LOL等,当然她最喜欢玩的还是HPU的剪刀石头布啦。

游戏介绍:

n个人参与,每个人的策略随机。现在告诉你 n-1 个人的选取策略,王小二应该怎么出才保证最优结果。

(赢一个人加一分,输一个人减一分,平局得0分).

现在的问题是:1代表剪刀,2代表石头,3代表布,求解王小二所有的最优策略(最大得分)。

比如:4 1 3 1,此时n=4,最终结果:

1 1

2 1

可能有多个最优策略(得分相同),输出顺序:1>2>3.

输入

        多组测试数据,每一行一个整数n(1<n<100000),接下来一行n-1个整数Ai(1<=Ai<=3),分别代表这n-1个人的策略。

输出

        每组数据输出所有结果,每行包含两个整数,分别代表王小二的最优策略和得分。

样例输入

4
1 3 1

样例输出

1 1
2 1

Solution

    统计每种策略出现的次数,枚举王小二的3种策略; 算出最大得分cnt,枚举三种策略和最大值比较,相等就输出;

Code

//统计每种策略出现的次数,枚举王小二的3种策略;
//算出最大得分cnt,枚举三种策略和最大值比较,相等就输出; 

#include <cstdio>
//调用库,或者自己实现max函数都可以; 
int max(int a, int b) {
	if(a >= b) return a;
	return b;
}

int main() {
	int n, k;
	while(scanf("%d", &n) != EOF) {
		int ans1 = 0, ans2 = 0, ans3 = 0;
		for(int i = 0; i < n - 1; i++) {
			scanf("%d", &k);
			if(k == 1) ans1++;
			if(k == 2) ans2++;
			if(k == 3) ans3++;
		}
		int cnt1 = ans3 - ans2;
		int cnt2 = ans1 - ans3;
		int cnt3 = ans2 - ans1;
		int cnt = max(max(cnt1, cnt2), cnt3);
		if(cnt1 == cnt) printf("1 %d\n", cnt);
		if(cnt2 == cnt) printf("2 %d\n", cnt);
		if(cnt3 == cnt) printf("3 %d\n", cnt);
	}
	return 0;
}

2018-01-17 17:08:19
About | Past

基于 PPKCdaily
Copyright © HPUACM