问题 B: 走向人生巅峰
问题描述:
正在上学的同学们一定很向往大学毕业进入职场,成为一名光荣的程序员,然后大秀自己的代码功力,得到老板的赏识、迎娶白富美、成为CEO、从此走上人生巅峰...咳咳,扯远了,但是小A同学就有着上述梦想,日有所思夜有所梦,终于小A同学梦到自己大学毕业成为了一名光荣的程序员,应聘进了一家知名公司去搬砖,搬砖就要有工资啊,在跟老板讨论薪资的时候,想到在书上看过的《国王赏不起的米》(没读过的同学不要怕,此页面底部有整篇文章,可以顺便读一下),计上心头,对老板说:不如这样,我第一天只要1块的工资,其后每天工资是前一个天的两倍,也就是前5天的工资分别是1、2、4、8、16块。老板一听,简直太划算啦,就这么愉快地决定了。而聪明的你一定知道,由于每天翻倍的原因,等到后面小A同学的工资是个恐怖的数字,但是前面一些天小A同学的工资是真的低啊,都不够吃饭,俗话说人是铁饭是钢,一顿不吃饿的慌,小A同学很可能没等到走上人生巅峰就已经饿的光荣牺牲,如果某天小A同学吃不起饭,那他就会光荣牺牲。
现在设饭价是a元,而小A同学原本就有b元,请问小A同学能梦到他走上人生巅峰(就是没有牺牲)的那一刻么?
现在设饭价是a元,而小A同学原本就有b元,请问小A同学能梦到他走上人生巅峰(就是没有牺牲)的那一刻么?
输入
第一行一个数字t(0<t<=1000),代表测试数据的组数。其后有t组测试数据,每组两个数字a, b,分别代表饭价a和小A同学的初始资金b。测试数据保证a,b均在[1,100000]之间。
输出
如果小A同学可以梦到他走向人生巅峰的那天,请输出一个"YES",否则请输出一个"NO"。每个输出占一行。
样例输入 Copy
2
100 1
2 100
样例输出 Copy
NO
YES
提示
对于每一天,先发工资。
解题思路:刚开始想要计算到第n天为止工资和饭钱分别有多少差值为多少,奈何计算能力不过关。随后想到可以用每天的余额是否大于0来代替,如果第二天天的工资大于等于第二天的饭价,那么就不用担心,如果小于就要计算加上余额是否够用。不得不说几个月不做题真的手生太多了,优秀的人太多,只能一直努力。
代码附上:
#include<stdio.h> int main() { int t; scanf("%d",&t); while(t--) { int flag=0; double a,b,s=1.0,r; scanf("%lf%lf",&a,&b); while(s<a) { r=b+s-a; b=r; s=s*2.0; if(b<0) { flag=1; break; } } if(flag==0) printf("YES\n"); else printf("NO\n"); } return 0; }
生活简单 尽力而为