标签:Educational Rated int ll Swords 消耗 long 奖励 include
地址:http://codeforces.com/contest/1366/problem/A
题意:给出a,b的数目
a b
1a+2b->得一个奖励
2a+1b->得一个奖励
求最大奖励数
解析:
规定:a<=b
肯定对大的来讲,尽量让它先-2。
那么如果得a个奖励,那么消耗2*a个b,如果b>=2*a,这个时候,直接输出a
否则:b<2*a:这个时候,不仅仅是a要消耗1,b也是有机会消耗1的。
假设两种物品分别合成了x,y个
那么消耗了2*x+y个a
x+2*y个b
那么有:2*x+y<=a,x+2*y<=b,相加得:x+y<=(a+b)/3,即为答案。
关于这个结论,还可以这么解释:
b每次消耗2,a每次消耗1,当b<=a时,轮到a每次消耗2,b每次消耗1,但是无论怎么样,每次消耗的都是(a+b)-3
当剩余(a+b)<3时,无论如何不能再合成了,也算是%3的余数了。所以答案一定是:(a+b)/3
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=8e3+10; typedef long long ll; int main() { int t; cin>>t; while(t--) { ll a,b; cin>>a>>b; if(a>b) swap(a,b); if(b>=2*a) cout<<a<<endl; else cout<<(a+b)/3<<endl; } }
标签:Educational,Rated,int,ll,Swords,消耗,long,奖励,include 来源: https://www.cnblogs.com/liyexin/p/13109870.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。