筆試編程題彙總

"""
題目描述:香檳塔的視覺效果是,如果這一層滿了,會自動往下一層流。現在牛牛聽妞妞指令,
        一個指令是往第X層倒入體積爲V的香檳,一個指令是詢問第k層的香檳體積,請使用程序實現這兩個指令
輸入描述:第一行爲兩個整數n,m,表示香檳塔的總層數和指令條數
        第二行是n個整數ai,表示每層香檳的容量
        第三行到第2+m行表示指令,一種指令是"2 x v"表示往第x層倒入v,另一種是"1 k"表示詢問第k層有多少香檳
輸出描述:對於每個詢問,輸出一個整數表示第k層香檳的容量

樣例:
    輸入:
        1 2
        8
        2 1 9
        1 1
    輸出:
        8

"""



import sys

def step_ask(V, command):
    idx_cur = command-1
    print(V[idx_cur])

def step_add(V, command, V_max):
    add_all = command[1]
    idx_cur = command[0]-1
    while True:
        if add_all<=0 or idx_cur>=len(V):
            break
        if add_all <= V_max[idx_cur]-V[idx_cur]:
            V[idx_cur] += add_all
            add_all = 0
        else:
            add = V_max[idx_cur]-V[idx_cur]
            V[idx_cur] = V_max[idx_cur]
            add_all -= add
            idx_cur += 1


def step(V, command, V_max):
    if len(command)==2:
        step_ask(V, command[1])
    else:
        step_add(V, command[1:3], V_max)

if __name__ == "__main__":
    # 讀取第一行的n
    # n = int(sys.stdin.readline().strip())

    line0 = sys.stdin.readline().strip()
    layers_num, command_num = list(map(int, line0.split()))

    line1 = sys.stdin.readline().strip()
    init_V = list(map(int, line1.split()))

    V_max = init_V.copy()
    V_cur = [0]*len(V_max)
    for idx in range(command_num):
        line2 = sys.stdin.readline().strip()
        command = list(map(int, line2.split()))
        step(V_cur, command, V_max)


    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章