UVa 12247 - Jollo

题目:一个双人卡片游戏,每张卡片上有一个1-52中的不同的某个值,开始时每人分发3张牌,

            游戏分三轮,每轮每人出异常牌比大小,大的获胜(顺序大,值小的),三局两胜制,

            小王子不会玩游戏(认为是随机出牌),现在小王子发了3张牌,而小公主发了2张牌,

            问小公主的第三张牌的最大(值最小)为多少时,小王子一定能赢,否则为-1。

分析:搜索。按递增序枚举小公主的最后一张牌,然后和小王子出牌的全排列比较即可。

说明:注意每个卡片只能用一次。

#include <stdio.h>
#include <stdlib.h>

int order[6][3] = {
	0, 1, 2,  0, 2, 1,  
	1, 0, 2,  1, 2, 0,
	2, 0, 1,  2, 1, 0, 
};
int used[55];

int f(int P[], int X, int Y)
{
	for (int i = 1; i <= 52; ++ i) {
		if (!used[i]) {
			int min = 3;
			for (int t = 0; t < 6; ++ t) {
				int count = 0;
				if (P[order[t][0]] < X) {
					count ++;
				}
				if (P[order[t][1]] < Y) {
					count ++;
				}
				if (P[order[t][2]] < i) {
					count ++;
				}
				if (min > count) {
					min = count;
				}
			}
			if (min >= 2) {
				return i;
			}
		}
	}
	return -1;
}

int main()
{
	int P[3], X, Y;
	while (~scanf("%d%d%d%d%d",&P[0],&P[1],&P[2],&X,&Y) && P[0]+P[1]+P[2]+X+Y) {
		for (int i = 1; i <= 52; ++ i) {
			used[i] = 0;
		}
		used[P[0]] = 1; 
		used[P[1]] = 1; 
		used[P[2]] = 1;
		used[X] = 1;    
		used[Y] = 1;
		
		printf("%d\n",f(P, X, Y));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值