本文主要是介绍PTA------->大熊小熊掰玉米,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一,题目:
有大小两头熊,找了一个好天气,相约各背着一个筐子去掰玉米。
熊会有以下两种动作:
- 掰一个玉米棒子扔进自己的筐子
- 嫌筐子太重,从自己的筐里拿出一个玉米棒子扔进另一头熊的筐子
注意:如果筐子满了,那么若再向它扔一个玉米棒子,这个玉米棒子将掉到地上。如果筐子是空的,那么从这个筐子里拿玉米,显然什么也拿不到。
假设每个玉米棒上的玉米粒数量都不会变化(不会被磕掉),请根据给定的两头熊掰玉米的过程,计算最终两头熊筐子里的玉米棒上的玉米粒数量。
p.s. 呃…… 大家见过玉米棒子吧? 为避免题意理解偏差,提供一张图片:
这张图片显示了3个玉米棒子,每个棒子上有若干粒玉米。
输入格式:
第一行给出两个不超过50的正整数,分别是大熊、小熊的筐子所能容纳玉米棒子的最大数量。(筐子的大小和熊的大小没有关联)
接下来有若干行:每行先给出一个范围是[-2,2]
的整数C
,并且:
若C
为1
或2
,则在这一行再给出一个不超过1000
的正整数m
,表示大熊(C=1
)或小熊(C=2
)掰了一个有m
粒玉米的棒子扔进自己的筐子,C
和m
之间以一个空格分隔。
若C
为-1
或-2
,则表示大熊(C=-1
)或小熊(C=-2
)从自己的筐子拿一个玉米棒扔到另一头熊的筐子里。
若C
为0
,表示掰玉米过程结束,这是最后一行输入。
注意,每行输入的末尾是有换行符的。
输出格式:
在一行中输出掰玉米结束后,大熊和小熊各自筐子里玉米棒子上的玉米粒总数量,中间以一个空格分隔,行末有换行符。
输入样例:
4 5
1 1
1 2
-1
2 4
-1
2 8
-1
1 16
1 32
2 64
-1
1 128
2 256
-2
0
输出样例:
208 15
二,思路:用个栈直接模拟胸大和熊二的篮筐情况。
三,代码:
#include <iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<set>
#include<stack>
#include<queue>
#include<map>
using namespace std;const int N=15,M=1e9+7;typedef long long ll;
typedef pair<int,int> pii;int arr[N];
int brr[N];void Solved() {int a,b;cin>>a>>b;stack<int> s1,s2;int op;while(cin>>op){if(op==0) break;else if(op>0){int x;cin>>x;if(op==1){if(s1.size()<a){s1.push(x);}}else{if(s2.size()<b){s2.push(x);}}}else{if(op==-1&&!s1.empty()){int t=s1.top();s1.pop();if(s2.size()<b) s2.push(t);}else if(op==-2&&!s2.empty()){int t=s2.top();s2.pop();if(s1.size()<a) s1.push(t);}}}int sum1=0;while(!s1.empty()) {sum1+=s1.top();s1.pop();}cout<<sum1<<" ";int sum2=0;while(!s2.empty()) {sum2+=s2.top();s2.pop();}cout<<sum2<<endl;
}int main()
{int t;//cin>>t;t=1;while(t--) {Solved();}return 0;
}
这篇关于PTA------->大熊小熊掰玉米的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!