[codeforces 1366A] Shovels and Swords 公式推导+取值限制

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 
#include 
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
		printf("%d\n",min((a+b)/3,b));
	}
}

 

你可能感兴趣的:(codeforces)