2015福建省赛 fzoj RunningMan 2221 (数学博弈)

11 篇文章 0 订阅
 Problem 2221 RunningMan

Accept: 9    Submit: 20
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

ZB loves watching RunningMan! There's a game in RunningMan called 100 vs 100.

There are two teams, each of many people. There are 3 rounds of fighting, in each round the two teams send some people to fight. In each round, whichever team sends more people wins, and if the two teams send the same amount of people, RunningMan team wins. Each person can be sent out to only one round. The team wins 2 rounds win the whole game. Note, the arrangement of the fighter in three rounds must be decided before the whole game starts.

We know that there are N people on the RunningMan team, and that there are M people on the opposite team. Now zb wants to know whether there exists an arrangement of people for the RunningMan team so that they can always win, no matter how the opposite team arrange their people.

 Input

The first line contains an integer T, meaning the number of the cases. 1 <= T <= 50.

For each test case, there's one line consists of two integers N and M. (1 <= N, M <= 10^9).

 Output

For each test case, Output "Yes" if there exists an arrangement of people so that the RunningMan team can always win. "No" if there isn't such an arrangement. (Without the quotation marks.)

 Sample Input

2
100 100
200 100

 Sample Output

No
Yes

 Hint

In the second example, the RunningMan team can arrange 60, 60, 80 people for the three rounds. No matter how the opposite team arrange their 100 people, they cannot win.

//题意:

给你n,m,n表示跑男团的人数,m表示你拥有的人数,现在要将各自团队分成三部分,通过比较大小来评判谁输谁赢,比赛采用三局两胜制,并且规定如果跑男团派出的人数等于拟派出的人数,那么这局算跑男团赢。问给你n,m后,判断跑男团是否必赢,若是,则输出Yes,否则输出No。

//思路:

就是简单的数学博弈,因为跑男团必赢,所以可以肯定跑男团必定要赢两次,那么怎么才能判定跑男团必定赢了两次呢。

跑男团先派出你队人数的一半,如果你这次赢了,那么,队里就只剩下一半的人数-1(你只有大于跑男团的人数你才能赢),那么后两局,跑男团必须得都赢,若想这两局必赢,那么,跑男团每次必须得派出你队里的一半的人数。那么综上就可知跑男团的人数必须得是你队里的人数的3/2倍以上才会必胜。

Hait:因为在人数相等时算跑男团胜,所以跑男团人数至少为m*3/2-1。

具体看代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
	int t;
	int n,m;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		if((n+1)*1.0>=(m*3/2))
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值