gg有一个超市,超市里有2个员工,分别是送货的小a、摆货的小b,超市有大厅和仓库。大厅里有个货架,货架只有一个口,可以放商品或者取商品;仓库里有条传送带,会把放入前门的货品运送到后门。小a的工作是每天早上把商品一个一个的送到仓库前门;小b的工作是每天早上把商品从仓库后门一个一个的取出放到大厅的货架上,一般来说,都会把新取的货品放到货架最底层,可是小b很懒,每次都把商品放到最前面;超市每天都有顾客来购物。gg偶尔会在一天的营业结束后来超市抽查货品,如果发现货架上的第一个商品是三天前进货的,gg会发怒,并把货架清空。
输入格式:
在第一行给出n(n<=100),代表总天数,接下来n行为每天发生的事情。
每行第一个数字代表第几天,题目保证天数依次有序
每行第二个数字代表小a今天得进货数量,范围0~1000
每行第三个数字代表小b今天往货架上放货得数量,范围0~1000
每行第四个数字代表顾客今天买走了多少商品,范围0~1000
每行第五个数字代表gg今天来了没有,1代表来了,0代表没来
数字间以空格分隔
数据不保证小b得取货量<=仓库剩余量,货架剩余量<=估计购买量
输出格式:
如果某天gg抽查时发怒了,则输出天数后加一串字符串"Wang!Wang!!Wang!!!"。
例:gg在第三天抽查时发怒了,则输出“3 Wang!Wang!!Wang!!!”.
输入样例:
在这里给出一组输入。例如:
5
1 10 4 3 0
2 10 4 4 0
3 0 5 5 0
4 0 1 1 1
5 0 0 0 0
输出样例:
在这里给出相应的输出。例如:
4 Wang!Wang!!Wang!!!
栈和队列模拟
#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
int time;
}t;
int main()
{
cin>>n;
int sum = 0;
int m,a,b,buy,vis;
stack<node>s,temp;
queue<node>q,tmp;
for(int i = 1;i<=n;i++){
cin>>m>>a>>b>>buy>>vis;
for(int i = 0;i<a;i++){
node k;
k.time = 0;
q.push(k);
}
sum+=a;
if(b>=sum) b = sum;
for(int j = 0;j<b;j++){
sum--;
node k = q.front();
q.pop();
s.push(k);
}
int len = s.size();
if(buy>len) buy = len;
while(buy--){
s.pop();
}
while(!s.empty()){
node k;
k = s.top();
k.time++;
temp.push(k);
s.pop();
}
while(!temp.empty()){
node k;
k = temp.top();
temp.pop();
s.push(k);
}
while (!q.empty())
{
node k = q.front();
q.pop();
k.time++;
tmp.push(k);
}
while(!tmp.empty()){
node k = tmp.front();
tmp.pop();
q.push(k);
}
if(s.size() !=0){
if(s.top().time>3&&vis==1){
printf("%d Wang!Wang!!Wang!!!\n",i);
while(!s.empty()){
s.pop();
}
}
}
}
return 0;
}