首页 > 学院 > 开发设计 > 正文

FZU 2221 田忌赛马应用

2019-11-10 18:10:54
字体:
来源:转载
供稿:网友

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
2100 100200 100Sample Output
NoYesHint

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代表两方人数,3回合3局2胜,每回合两方各派出一些人数(可为0),人数多的一方胜。

跑男队伍有无必胜方案

思路:参考田忌赛马策略,考虑跑男队伍在最坏情况下获胜的人数最小的方案。

一.对方队伍为奇数人:

对方人数分配: m/2+1    m/2     0

跑男人数分配:L3>=L1>=L2

并且赢2局就可以,前2回合可以赢一场输一场,分别为m/2和m/2,结果为3*(m/2)

一.对方队伍为偶数人:

对方人数分配:m/2       m/2    0

跑男人数分配:L3>=L1>=L2

结果为m/2   m/2-1 ,结果我3*(m/2)-1

#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<vector>#include<algorithm>#define inf 0x3f3f3f3f#define ll long longusing namespace std;int main(){    int T;    cin>>T;    while(T--)    {        int n,m;        cin>>n>>m;        int ans;        if(m%2)            ans=3*(m/2);        else            ans=3*(m/2)-1;        if(n>=ans)            cout<<"Yes"<<endl;        else            cout<<"No"<<endl;    }    return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表