Educational Codeforces Round 87 (Rated for Div. 2) 参与排名人数11499,比赛前遇到2次延时,17:05-17:15,17:15-17:20
[codeforces 1354A] Alarm Clock 难在题意的解读
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址http://codeforces.com/contest/1354/problem/A
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
A - Alarm Clock | GNU C++17 | Accepted | 15 ms | 3600 KB |
结合样例,来来回回,好几次,才读懂题意,
对样例解读如下
10 3 6 4
目标:至少休息够10分钟
3分钟后,闹钟响,此时,休息了3分钟
之后,6分钟,闹钟响,入睡需要4分钟,此时,休息了6-4=2分钟
再之后,6分钟,闹钟响,入睡需要4分钟,此时,休息了6-4=2分钟
再之后,6分钟,闹钟响,入睡需要4分钟,此时,休息了6-4=2分钟
再之后,6分钟,闹钟响,入睡需要4分钟,此时,休息了6-4=2分钟
总共休息了3+2+2+2+2=11>=10,共耗时3+6+6+6+6=27
5 9 4 10
目标:至少休息够5分钟
9分钟后,闹钟响,此时,休息了9分钟
9>5,共耗时9,无需闹钟继续响
6 5 2 3
目标:至少休息够6分钟
5分钟后,闹钟响,此时,休息了5分钟
之后,2分钟,闹钟响,入睡需要3分钟,此时,因2<=3,休息了0分钟
再之后,2分钟,闹钟响,入睡需要3分钟,此时,因2<=3,休息了0分钟
再之后,2分钟,闹钟响,入睡需要3分钟,此时,因2<=3,休息了0分钟
再之后,2分钟,闹钟响,入睡需要3分钟,此时,因2<=3,休息了0分钟
......
总共休息了5+0+0+0+0+......<6,无法实现休息6分钟
输出-1
明白题意后,编码就容易了,AC代码如下
#include <stdio.h>
#define LL long long
LL a,b,c,d,ans;
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
if(a<=b){printf("%lld\n",b);continue;}
//a>b
ans=0,a-=b,ans+=b;
if(c<=d){printf("-1\n");continue;}
ans+=(a-1+(c-d))/(c-d)*c;//(a-1+(c-d))/(c-d)等同于a/(c-d)向上取整,如3/2向上取整,结果是2
printf("%lld\n",ans);
}
return 0;
}