PTA gg的超市

PTA gg的超市


题目复杂的很蛋疼,其实就是一个队列入队出队,一个入栈出栈的过程。

大致题意:
① 小a在仓库前门传送带放东西,传送带送到仓库后门。(符合队列先进先出的特性)
② 小b从传送带取东西,但是由于他偷懒,每次都放到货架最前面。客人来每次都会从最新的开始拿(符合栈先进后出的特性)

需要注意的点:
① 假如货架要取10个货物,但是仓库只有5个,这时货架就只能入栈5个。
② 管理检查货架时,货架可能为空。

import java.util.ArrayDeque;
import java.util.Scanner;

// 货物的结构体,只需要存放入货的日期即可。
class Node{
	int date;
	Node(int date){
		this.date = date;
	}
}
public class Main {
	
	// 题目长的一批,做这种题要学会捕获有用的题干
	public static void main(String[] args) {
		
		Scanner cin = new Scanner(System.in);
		// java获取输入,d为天数
		int d = cin.nextInt();
		// java的栈和队列可以用同一个类实现,这里store就是仓库(a队列)
		ArrayDeque<Node> store = new ArrayDeque<>();
		// shop就是货架(b栈)
		ArrayDeque<Node> shop = new ArrayDeque<>();
		for(int i = 1; i <= d; i++) {
			// 获取输入,第一个输入的第几天没卵用
			cin.nextInt();
			int a1 = cin.nextInt();
			int a2 = cin.nextInt();
			int a3 = cin.nextInt();
			int a4 = cin.nextInt();
			// 根据进货数量,以货物为单位入栈,i就是货物进货的日期
			for(int a = 0; a < a1; a++)
				store.add(new Node(i));
			// 题目不保证仓库后面的货量 >= b要拿走的量,进行一次判断,确保不要多取
			int t_a2 = a2 > store.size() ? store.size() : a2;
			// 根据b取货的数量,从仓库后门拿走货物放到货架上
			for(int a = 0; a < t_a2; a++) 
				shop.push(store.pop());
			// 同上,不保证顾客买走的量 <= 货架的量,进行一次判断
			int t_a3 = a3 > shop.size() ? shop.size() : a3;
			for(int a = 0; a < t_a3; a++)
				shop.pop();
				
			// 注意判断来检查时,货柜是否为空
			if(a4 == 1 && !shop.isEmpty()) {
				int day = i - shop.peek().date;
				if(day >= 3) {
					System.out.println(i + " Wang!Wang!!Wang!!!");
					shop.clear();
				}
			}
		}
	}
}

你可能感兴趣的:(数据结构与算法)