D-Runing Man(思维题)

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.
  • 题意分析:    要想赢,则至少赢两局。题意指出即在未比赛前,两支队伍就要给出自己的成员安排方案,Runing man 简称 A,the opposite team 简称 B).A要在未比赛前就拿出一个方案,即使B队知道这个方案无济于事。那就是尽可能的将人数平分为三,一方面保证至少赢两场。另一方面在输的那一局尽可能消耗B队的人数.
  • ①:         B队人数为偶数。因为A队人数多,所以要想赢,则将人数平均分为两组(赌一把)。 即两组 k , k 。则A队为了赢必须有两队也为k,另一队即使输也不要紧,但是为了消耗对方的人数,则应安排为k-1.(B对方的两组并不一定是第一局和第二局上场,上场次序可以是任意的).
  • ②:           B队人数为奇数。则将人数尽可能平分(放手一搏),即k,k-1。则A队三队人数为k-1,k-1,k-1。保证赢两局就足够了。
  • 题意很好理解,不过就是要理清思维。WA了十几次,唉,继续加油吧。(Andy)
  • AC Code                                                                              
#include<cstdio>
#include<cstring>
#include<algorithm> 
using namespace std;

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int a, b;
		scanf("%d %d",&a,&b);       //b的奇偶对应采取不同操作 
		int k;
		if(b%2 == 0)
		{
			k = b/2;	
			if(a >= 3*k-1) printf("Yes\n");
			else           printf("No\n");
		}
		else
		{
			k = b/2+1;
			if(a >= 3*k-3) printf("Yes\n");
			else           printf("No\n");
			
		}          

	} 
	
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/Alibaba_lhl/article/details/80053693