标签:题解 Alarm long 分钟 leqslant 闹钟 judge CF1354A 睡够
Content
小 \(P\) 要睡足 \(a\) 分钟,他为自己设定了一个 \(b\) 分钟后的闹钟。如果在 \(b\) 分钟后闹钟响时他还是没有睡够,他会在设定一个 \(c\) 分钟的闹钟,并花费 \(d\) 分钟入眠,如果在闹钟响后他还是没有睡够,他将重复设定闹钟并花费一定时间入眠,直到他在一次闹钟响后睡够了为止。现在给定 \(t\) 组 \(a,b,c,d\),请问小 \(P\) 需要花费多少分钟才能让自己睡够?如果无论怎样都不能让他睡够,输出 \(-1\)。
数据范围:\(1\leqslant t\leqslant 1000,1\leqslant a,b,c,d\leqslant10^9\)。
Solution
模拟题目。同时也是分类讨论的一道好题。
我们先根据 \(a,b\) 的大小关系来分类讨论:
一、如果 \(a\leqslant b\),那么只需要一次闹钟小 \(P\) 就会醒来,那么所花费的时间就是 \(b\)。
二、如果 \(a>b\),我们再根据 \(c,d\) 的大小关系来分类讨论。
-
如果 \(c\leqslant d\),则他每次设完闹钟之后,总会还没入眠就又被闹钟叫醒,因此他永远也不能睡够,答案为 \(-1\)。
-
如果 \(c>d\),则他每次设完闹钟之后,会睡 \((c-d)\) 分钟。又因为他被第一个闹钟叫醒之后还需要睡 \((a-b)\) 分钟,因此需要叫醒他 \(\left\lceil\dfrac{a-b}{c-d}\right\rceil\) 次他才能够睡够,而每次花费的时间显然是 \(c\) 分钟,所以总共所需要花费的时间就是 \(\left\lceil\dfrac{a-b}{c-d}\right\rceil\times c+b\)。
下面的代码使用了一个 \(\texttt{judge}\) 函数返回了题目的答案,思路如上,因此这里只给出 \(\texttt{judge}\) 函数,剩下的留给读者思考(难度几乎是没有的,毕竟 \(\texttt{judge}\) 函数才是这个代码的核心)。
Code
long long judge(long long a, long long b, long long c, long long d) {
if(a <= b) return b;
if(a > b && c <= d) return -1;
if(a > b && c > d) return (long long)(ceil((a - b) * 1.0 / (c - d))) * c + b;
}
标签:题解,Alarm,long,分钟,leqslant,闹钟,judge,CF1354A,睡够 来源: https://www.cnblogs.com/Eason-AC/p/15725100.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。