# Hash Table# Greedy

f069 - Error

🔗 前往 ZeroJudge 原題

題目描述

題目描述 Euan 的飲食習慣,給定一些食物的熱量以及 Euan 吃的數量,計算 Euan 攝取的總熱量是否超過了每日的熱量限制。如果 Euan 攝取的熱量小於或等於限制,輸出 "Euan you are doing a great job!",否則輸出 "Euan eats too much."。

解題思路

這題的核心是計算 Euan 攝取的總熱量。題目給定了食物名稱和對應的熱量,以及 Euan 吃的食物名稱和數量。可以使用一個 map 資料結構來儲存食物名稱和熱量之間的對應關係。然後,遍歷 Euan 吃的食物,計算總熱量。最後,將總熱量與每日熱量限制進行比較,輸出相應的結果。

複雜度分析

  • 時間複雜度: O(N + M),其中 N 是食物種類的數量,M 是 Euan 吃的食物種類的數量。map 的查找和插入操作平均時間複雜度為 O(1)。
  • 空間複雜度: O(N),其中 N 是食物種類的數量。map 儲存了食物名稱和熱量之間的對應關係。

程式碼

#include <iostream>
#include <map>
using namespace std;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	long long int n,w;
	while(cin >> n >> w){
		w*=40;
		map <string ,long long int> food;
		string t;
		long long int tmp;
		while(n--){
			cin >> t >> tmp;
			food[t]=tmp;
		}
		cin >> n;
		while(n--){
			cin >> t >> tmp;
			w-=food[t]*tmp;
		}
		(w>=0)?cout << "Euan you are doing a great job!\n":cout << "Euan eats too much.\n";
	}
}

Discussion