# Greedy# Simulation

e969 - 大吃大喝 (Big eater)

🔗 前往 ZeroJudge 原題

題目描述

題目描述 Wayne 有 m 元,他想盡可能多地吃蘋果派和喝玉米濃湯。蘋果派需要 32 元,玉米濃湯需要 55 元。Wayne 每次吃或喝都需要花費 t 個單位時間。如果 Wayne 的錢不足以購買蘋果派或玉米濃湯,他將停止吃喝。題目要求模擬 Wayne 的吃喝過程,並輸出每次吃喝的時間和剩餘金額。如果 Wayne 一開始的錢不足以吃或喝,則輸出 "Wayne can't eat and drink."。

解題思路

這題是一個簡單的模擬題。Wayne 會根據 s 的值(0 代表喝玉米濃湯,1 代表吃蘋果派)嘗試購買食物或飲料。如果錢足夠,則扣除相應的金額,並輸出訊息。如果錢不足,則停止。s 的值會在每次成功購買後翻轉。

複雜度分析

  • 時間複雜度: O(m/32 + m/55) (最壞情況下,Wayne 只買蘋果派或只喝玉米濃湯)
  • 空間複雜度: O(1)

程式碼

#include <stdio.h>
int main(){
	int m,t,tt=0,s;
	scanf("%d%d%d",&m,&t,&s);
	if(m<32||(s==1&&m<55))
		puts("Wayne can't eat and drink.");
	else{
		int br=0;
		while(br==0){
			if(s==1){
				if(m>=55){
					m-=55;
					printf("%d: Wayne drinks a Corn soup, and now he ",tt);
					if(m&&m!=1)
						printf("has %d dollars.\n",m);
					else if(m==1)
						printf("has %d dollar.\n",m);
					else
						printf("doesn't have money.\n");
					tt+=t;	
					s=0;
				}
				else
					br=1;
			}
			else{
				if(m>=32){
					m-=32;
					printf("%d: Wayne eats an Apple pie, and now he ",tt);
					if(m&&m!=1)
						printf("has %d dollars.\n",m);
					else if(m==1)
						printf("has %d dollar.\n",m);
					else
						printf("doesn't have money.\n");
					tt+=t;	
					s=1;
				}
				else
					br=1;
			}
		}
	}
}

Discussion