[codeforces 1303B] National Project 比赛中罕见多次说明+分类讨论+int溢出
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1303/problem/B
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
B - National Project | GNU C++11 | Accepted | 30 ms | 0 KB |
比赛中罕见多次说明+分类讨论+int溢出
考虑的情况比较多,慢一点,每次测试,最后一组数据,始终对不上,数了数样例最后一组数据的输出,我的天,int溢出。
顾不了区分什么地方用int,什么地方用long long,果断全部采用long long,将输入输出全改为%lld
样例通过,提交AC.
#include <stdio.h>
#define LL long long
int main(){
LL t,n,g,b,half,ans,c;
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&n,&g,&b);
half=(n+1)/2,ans=0;
if(n<=g)printf("%lld\n",n);
else{//n>g
if(half<=g){
ans=n;
printf("%lld\n",ans);
}else{//half>g
n-=half;
ans+=g;
half-=g;
if(half%g==0){
ans+=(b+g)*(half/g);
c=half/g*b;
if(c>=n)printf("%lld\n",ans);
else printf("%lld\n",ans+(n-c));//c<n
}else{//half%g!=0
ans+=(b+g)*(half/g);
ans+=(b+half%g);
c=half/g*b+b;
if(c>=n)printf("%lld\n",ans);
else printf("%lld\n",ans+(n-c));//c<n
}
}
}
}
return 0;
}