主題

ZeroJudge - f375: 神奇肥料 Fertilizer 解題心得

Not In My Back Yard | 2020-11-14 00:00:04

題目連結:


題目大意:
給定三正整數 S 、 E 、 A (10 ≦ S 、 E ≦ 100,1 ≦ A ≦ 10),依序代表花一開始高度為 S 單位、顧客的期望高度為 E 單位、顧客的耐性值為 A。

花店老闆每天都會澆花,且每三天他會使用神奇肥料。但是他每開店八天就會關店休息兩天之後再繼續開店,那兩天既不會澆花也不會施肥。

而顧客會在老闆休息完後回來繼續開店去店裡觀望花的高度。如果目前花的高度沒有達到至少 E 單位高,則顧客的耐性會減一。一旦顧客耐性值歸零後,顧客便會取消訂單,花就賣不出去。

而花的高度之成長公式如下:
若前一天有使用神奇肥料,則今天的高度會增加「前一天之高度除以 3 取商數」之單位高;
如果只是單純澆水,則今天的高度會增加「前一天之高度除以 10 取商數」之單位高。
 
試問花朵在第幾天時會達到顧客之要求最低高度?如果顧客取消了訂單,使得花賣不出去,輸出「unsalable」;反之,則輸出所求的天數。

下圖為 S = 10 且讓花成長到第 12 天之過程:



範例輸入:
範例輸入 #1
10 10 1

範例輸入 #2
10 24 10

範例輸入 #3
10 28 2

範例輸入 #4
10 50 1


範例輸出:
範例輸出 #1
1

範例輸出 #2
7

範例輸出 #3
9

範例輸出 #4
unsalable


解題思維:
從第 1 天開始,對於每天先判斷花的高度是否小於目標高度且顧客耐性值 > 0 。不符合的話就跳離此迴圈。符合的話,則:
先判斷今天顧客會不會來光顧,如果會則將耐性值減去 1 (不用去判斷花的高度,因為上面已經判過了);再來,判斷前一天是否休息。有休息則不更新花的高度。沒有休息才根據有無使用神奇肥料去更新花的高度。

跳出以上迴圈後,此時判斷花的高度有沒有 ≧ 顧客所需高度。如果有就輸出上面的迴圈停在第幾天,該天數即是所求;反之,代表顧客放棄了這筆買賣,因此輸出「unsalable」。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。
36 巴幣: 0

更多創作