#44950: 想請教各位為何無法通過所有測資#內有補述 #python


11216014@ymhs.tyc.edu.tw (030)

學校 : 國立楊梅高級中學
編號 : 240937
來源 : [220.137.88.97]
最後登入時間 :
2025-01-04 16:22:06
o711. 1. 裝飲料 -- 2024年10月APCS | From: [125.229.183.210] | 發表日期 : 2024-12-29 11:47

如提,目前跑完所有資料就是會有特定幾筆答案不對
可是我實在看不出來我的思路還是程式打錯了
想來請教
 
思路邏輯:
先從第一層開始 每次倒水進來時看是否裝滿並更新最高高度,隨時更新剩下高度
滿了就往下一層去 以此類推(若第二層也滿了就跳出
 
a = input()
s = list(map(int,input().split()))
d = list(map(int,input().split()))

 

maxs = 0
s = [s[0]**2,s[1]**2,s[2],s[3]]#底面積,剩餘高度

 

for i in d:
  #print(i,s,'999')
  rams = 0#暫時存此次進來的高度
  if s[2]:#第一層還沒裝滿
    ram = i/s[0]#可以裝滿的第一層高度
    if ram >s[2]:
      i = (ram-s[2]) *s[0]#剩下的要到第二層去了
      rams = s[2]
      s[2] = 0
    else:
      s[2] -= ram
      if ram >maxs:maxs = ram#更新最高高度
      continue
  #print(i,rams)
  #底下是第一層已經裝滿
  ram = i/s[1]#可以裝滿的第二層高度
  if ram >s[3]:#滿出來了
    if s[3] >maxs:maxs = s[3]
    break
  else:
    s[3] -= ram
    rams +=ram
    if rams >maxs:      
      maxs = rams#更新最高高度
  #print(rams,s,"444")

 

print(int(maxs))
 
#44951: Re: 想請教各位為何無法通過所有測資#內有補述 #python


11216014@ymhs.tyc.edu.tw (030)

學校 : 國立楊梅高級中學
編號 : 240937
來源 : [220.137.88.97]
最後登入時間 :
2025-01-04 16:22:06
o711. 1. 裝飲料 -- 2024年10月APCS | From: [125.229.183.210] | 發表日期 : 2024-12-29 11:55

 

更:不會過的測資點 6.7.8.14

 
#44956: Re: 想請教各位為何無法通過所有測資#內有補述 #python


leeguanhan0909@gmail.com (李冠翰)

學校 : 高雄市苓雅區復華高級中學國中部
編號 : 276558
來源 : [36.238.153.220]
最後登入時間 :
2025-04-05 17:05:47
o711. 1. 裝飲料 -- 2024年10月APCS | From: [42.77.93.205] | 發表日期 : 2024-12-29 18:27

如提,目前跑完所有資料就是會有特定幾筆答案不對
可是我實在看不出來我的思路還是程式打錯了
想來請教
 
思路邏輯:
先從第一層開始 每次倒水進來時看是否裝滿並更新最高高度,隨時更新剩下高度
滿了就往下一層去 以此類推(若第二層也滿了就跳出
 
a = input()
s = list(map(int,input().split()))
d = list(map(int,input().split()))

 

maxs = 0
s = [s[0]**2,s[1]**2,s[2],s[3]]#底面積,剩餘高度

 

for i in d:
  #print(i,s,'999')
  rams = 0#暫時存此次進來的高度
  if s[2]:#第一層還沒裝滿
    ram = i/s[0]#可以裝滿的第一層高度
    if ram >s[2]:
      i = (ram-s[2]) *s[0]#剩下的要到第二層去了
      rams = s[2]
      s[2] = 0
    else:
      s[2] -= ram
      if ram >maxs:maxs = ram#更新最高高度
      continue
  #print(i,rams)
  #底下是第一層已經裝滿
  ram = i/s[1]#可以裝滿的第二層高度
  if ram >s[3]:#滿出來了
    if s[3] >maxs:maxs = s[3]
    break
  else:
    s[3] -= ram
    rams +=ram
    if rams >maxs:      
      maxs = rams#更新最高高度
  #print(rams,s,"444")

 

print(int(maxs))

if s[3]>maxs:maxs=s[3]

應改為if s[3]>maxs:maxs=rams+s[3]

有可能超過第一杯時也超過第二杯

 
#44979: Re: 想請教各位為何無法通過所有測資#內有補述 #python


11216014@ymhs.tyc.edu.tw (030)

學校 : 國立楊梅高級中學
編號 : 240937
來源 : [220.137.88.97]
最後登入時間 :
2025-01-04 16:22:06
o711. 1. 裝飲料 -- 2024年10月APCS | From: [220.137.88.99] | 發表日期 : 2024-12-30 20:32

謝謝!我當初完全沒想到有可能一到就值接連第二層也裝滿

現在可以過了

 
ZeroJudge Forum