Deadline(codeforces)

戏子无情 提交于 2020-01-17 01:39:04

Adilbek was assigned to a special project. For Adilbek it means that he has nn days to run a special program and provide its results. But there is a problem: the program needs to run for dd days to calculate the results.

Fortunately, Adilbek can optimize the program. If he spends xx (xx is a non-negative integer) days optimizing the program, he will make the program run in ⌈dx+1⌉⌈dx+1⌉ days (⌈a⌉⌈a⌉ is the ceiling function: ⌈2.4⌉=3⌈2.4⌉=3, ⌈2⌉=2⌈2⌉=2). The program cannot be run and optimized simultaneously, so the total number of days he will spend is equal to x+⌈dx+1⌉x+⌈dx+1⌉.

Will Adilbek be able to provide the generated results in no more than nn days?

Input
The first line contains a single integer TT (1≤T≤501≤T≤50) — the number of test cases.

The next TT lines contain test cases – one per line. Each line contains two integers nn and dd (1≤n≤1091≤n≤109, 1≤d≤1091≤d≤109) — the number of days before the deadline and the number of days the program runs.

Output
Print TT answers — one per test case. For each test case print YES (case insensitive) if Adilbek can fit in nn days or NO (case insensitive) otherwise.

Example
input
3
1 1
4 5
5 11
output
YES
YES
NO
Note
In the first test case, Adilbek decides not to optimize the program at all, since d≤nd≤n.

In the second test case, Adilbek can spend 11 day optimizing the program and it will run ⌈52⌉=3⌈52⌉=3 days. In total, he will spend 44 days and will fit in the limit.

In the third test case, it’s impossible to fit in the limit. For example, if Adilbek will optimize the program 22 days, it’ll still work ⌈112+1⌉=4⌈112+1⌉=4 days.

题意:一个项目某人花n天完成,他也可以花x天优化它,优化后还需要(d/(x+1))向上取整天,现给出限定天数和d,为他是否在能再限定天数内完成。

思路:如果d<=n那么不用优化就能完成,如果需要优化则需要的最短时间使(x/2)+(d/(x/2+1))向上取整,拿它与n比较

AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
int pan(int a,int b)
{
    int t=a/b*b;
    if(t<a)
        return a/b+1;
    else
        return a/b;
}
int main()
{
    int t;
    int n,d;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&d);
        if(d<=n||(n/2+pan(d,n/2+1))<=n)
            printf("YES\n");
        else
            printf("NO\n");
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!