Educational Codeforces Round 89 (Rated for Div. 2) 参与排名人数13281
[codeforces 1366A] Shovels and Swords 公式推导+取值限制
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1366/problem/A
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
A - Shovels and Swords | GNU C++17 | Accepted | 15 ms | 0 KB |
题目大意:生产一个铲子,需要两根棍子,一个钻石;生产一把剑,需要一根棍子,两个钻石,一个铲子能卖一个绿宝石,一把剑能卖一个绿宝石。现在给一定数量的棍子,钻石,生产铲子,剑,将铲子,剑换成绿宝石,要求绿宝石的数量最多,请求出这个最多数量。
公式推导如下,棍子有a根,钻石有b个,设生产铲子x个,剑y把。
那么a=2x+y,b=x+2y
a+b=3(x+y)
(x+y)=(a+b)/3
请注意a=2x+y>=x+y,b=x+2y>=x+y
故需在a,b,(a+b)/3这三个数中取最小值
样例模拟如下
4 4
min(4,4,(4+4)/3)=2
可以这样生产,
1个铲子,2根棍子,1个钻石
1把剑,1根棍子,2个钻石
总共需2+3=3根棍子,1+2=3个钻石
1000000000 0
min(1000000000,0,(1000000000+0)/3)=0
7 15
min(7,15,(7+15)/3)=7
可以这样生产,
7把剑,7根棍子,14个钻石
8 7
min(8,7,(8+7)/3)=5
可以这样生产,
3个铲子,6根棍子,3个钻石
2把剑,2根棍子,4个钻石
总共需6+2=8根棍子,3+4=7个钻石
再提供两组数据
Input:
2
60 80
10 100
Output:
46
10
解释如下:
60 80
min(60,80,(60+80)/3)=46
可以这样生产,
14个铲子,28根棍子,14个钻石
32把剑,32根棍子,64个钻石
总共需28+32=60根棍子,14+64=78个钻石
10 100
min(10,100,(10+100)/3)=10
可以这样生产,
10把剑,10根棍子,20个钻石
最近几场比赛打下来,明显感觉味道变了,看来要增强适应能力,应变能力。
不得不说,该题放在第一题,真是个下马威。
赛后来看,该题若比赛时无法AC,还是要放弃。
AC代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
int t,a,b,c,ans1,ans2;
scanf("%d",&t);
while(t--){
scanf("%d%d",&a,&b);
if(a<b)c=a,a=b,b=c;//a>=b
printf("%d\n",min((a+b)/3,b));
}
}