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 }

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

猜你喜欢

转载自www.cnblogs.com/xunzf0402/p/11481547.html
今日推荐