Educational Codeforces Round 72 (Rated for Div. 2) A. Creating a Character

题目原文:http://codeforces.com/contest/1217/problem/A

题意:三个数a,b,c。。将c分配到a,b中,要分完。分完后a要严格大于b。有几种分法。

我的思路(菜菜鸟思路):分情况,a+c<=b,b>=a,剩下的a-b如果大于c,直接输出c+1,否则找到能够分给b最大的数即可。

AC代码

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 typedef long long ll;
 5 int main(){
 6     int T;
 7     cin>>T;
 8     while(T--){
 9         ll a,b,c;
10         cin>>a>>b>>c;
11         ll num;
12         if(a+c<=b){
13             cout<<"0"<<endl;
14             continue;
15         }
16         if(b>=a){
17             num=b-a+1;
18             c-=num;
19             cout<<c/2+1<<endl;
20         }
21         else{
22             num=a-b;
23             ll ans;
24             if(num>c){
25                 cout<<c+1<<endl;
26                 continue;
27             }
28             ans=c-(c-num)/2;
29             cout<<ans<<endl;
30         }
31     }
32     return 0;
33 }

参考大佬代码后得到的大佬思路(细微更改):直接设b能放n个,a+c-n>=b+n+1  ,a+c-b-1>=2n,0<=n<=c。答案显而易见,注意当a+c-b-1小于0时,答案直接是0次。

AC代码

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 typedef long long ll;
 5 int main(){
 6     int T;
 7     cin>>T;
 8     while(T--){
 9         ll a,b,c;
10         cin>>a>>b>>c;
11         //a+z-n>=y+n+1
12         //a+c-b-1>=2n
13         //0<=n<=c
14         ll ss=0;
15         ll num=a+c-b-1;
16         ll num1=max(num/2,ss);
17         if(num<0) num1=-2;
18         cout<<max(ss,min(num1+1,c+1))<<endl;
19     }
20     return 0;
21 }

心得:多运用数学知识,思维不能硬化,要活用脑

 

转载于:https://www.cnblogs.com/xunzf0402/p/11481547.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值