# Greedy# Simulation

d673 - 11608 - No Problem

🔗 前往 ZeroJudge 原題

題目描述

題目要求模擬一年中每個月的題目庫存變化。給定年初的庫存數量、每個月新增的題目數量以及每個月比賽需要的題目數量,判斷每個月是否能滿足比賽需求。如果某個月庫存不足,則輸出 "No problem. :(",否則輸出 "No problem! :D"。

解題思路

這題可以使用貪心策略和模擬的方法來解決。我們從年初開始,逐月計算題目庫存的變化。對於每個月,首先檢查庫存是否足夠滿足比賽需求。如果足夠,則輸出 "No problem! :D",並從庫存中扣除比賽所需的題目數量。如果庫存不足,則輸出 "No problem. :("。然後,將當月新增的題目數量加到庫存中。重複這個過程,直到處理完所有月份。

複雜度分析

  • 時間複雜度: O(n),其中 n 是月份數 (在本題中 n=12)。程式碼需要遍歷 12 個月份進行計算。
  • 空間複雜度: O(1)。程式碼使用固定大小的陣列來儲存題目數量,空間複雜度為常數。

程式碼

#include <iostream>
using namespace std;
int main (){
	std::ios::sync_with_stdio(false);
    std::cin.tie(0);
	int a[12],b[12];
	int c=0,ca=1;
	while(cin >> c){
		if(c<0){
			return 0;
		}
		else{
			cout << "Case " << ca << ":" << endl;
			ca++; 
		}
		for(int i=0;i<12;i++){
			cin >> a[i] ;
		}
		for(int i=0;i<12;i++){
			cin >> b[i] ;
		}
		for(int i=0;i<12;i++){
			if(b[i]>c){
				cout << "No problem. :(" << endl;
			}
			else{
				cout << "No problem! :D" << endl;
				c-=b[i];
			}
			c+=a[i];
		}
	}
}

Discussion