#35484: Python40%解


s11104220@school.saihs.edu.tw (施同學)

School : 臺北市立松山高級工農職業學校
ID : 221254
IP address : [118.165.14.31]
Last Login :
2024-06-17 17:43:35
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [123.193.213.137] | Post Date : 2023-06-04 21:10

我在嘗試不要每次碰到E就要重來 但是數字總是有一些落差
from sys import stdin
def main():
    s=stdin.readline()[1:].replace("\n","").replace("L","TL").replace("E","TE").split("T")
    i=0
    stack=[1,0]
    l=-1
    ans=0
    while i<len(s):
        if s[i][0]=="L":
            stack.append([int(s[i][1:]),i])
        elif s[i]=="E":
            stack[-1][0]-=1
            if(stack[-1][0]>0):i=stack[-1][1]
            else:stack.pop()
        elif l!=-1:
            ans+=abs(int(s[i])-l)
            l=int(s[i])
        else:
            l=int(s[i])
        i+=1
    print(ans)
main()
 
#35485: Re: Python40%解


s011388@fysh.tc.edu.tw (pollux)

School : 國立豐原高級中學
ID : 189768
IP address : [111.252.218.114]
Last Login :
2024-06-11 21:18:57
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [111.252.213.228] | Post Date : 2023-06-04 21:23

我在嘗試不要每次碰到E就要重來 但是數字總是有一些落差
from sys import stdin
def main():
    s=stdin.readline()[1:].replace("\n","").replace("L","TL").replace("E","TE").split("T")
    i=0
    stack=[1,0]
    l=-1
    ans=0
    while i
        if s[i][0]=="L":
            stack.append([int(s[i][1:]),i])
        elif s[i]=="E":
            stack[-1][0]-=1
            if(stack[-1][0]>0):i=stack[-1][1]
            else:stack.pop()
        elif l!=-1:
            ans+=abs(int(s[i])-l)
            l=int(s[i])
        else:
            l=int(s[i])
        i+=1
    print(ans)
main()



strg = input()
lis = []
num = 0
for i in range(len(strg)):
    s = strg[i]
    if s=="T": lis.append(s)
    elif s=="L": lis.append(s)
    elif s=="E": lis.append(s)
    else:
        num *= 10
        num += int(s)
        if i+1==len(strg) or (strg[i+1]=="T" or  strg[i+1]=="L" or strg[i+1]=="E"):
            lis.append(num)
            num = 0

ans = 0
index = 0
tp = 10 

def loop(num,ix):
    global lis,index,tp,ans
    index = ix
    while lis[index] != "E":
        n = lis[index]
        index += 1
        if n == "T": continue
        elif n == "L": loop(int(lis[index]),index+1)
        else:
            ans += abs(n-tp)
            tp = n
    if num!=1:
        loop(num-1,ix)
    else:
        index +=1
        return
               
def scan():
    global lis,ans,index,tp
    while index != len(lis):
        s = lis[index]
        index+=1
        if s == "T": continue
        elif s == "L": loop(int(lis[index]),index+1)
        else:
            ans += abs(s-tp)
            tp = s
scan()
print(ans)

我用遞迴解
也是40%



 
#35486: Re: Python40%解


s11104220@school.saihs.edu.tw (施同學)

School : 臺北市立松山高級工農職業學校
ID : 221254
IP address : [118.165.14.31]
Last Login :
2024-06-17 17:43:35
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [123.193.213.137] | Post Date : 2023-06-04 21:42

我在嘗試不要每次碰到E就要重來 但是數字總是有一些落差
from sys import stdin
def main():
    s=stdin.readline()[1:].replace("\n","").replace("L","TL").replace("E","TE").split("T")
    i=0
    stack=[1,0]
    l=-1
    ans=0
    while i
        if s[i][0]=="L":
            stack.append([int(s[i][1:]),i])
        elif s[i]=="E":
            stack[-1][0]-=1
            if(stack[-1][0]>0):i=stack[-1][1]
            else:stack.pop()
        elif l!=-1:
            ans+=abs(int(s[i])-l)
            l=int(s[i])
        else:
            l=int(s[i])
        i+=1
    print(ans)
main()



strg = input()
lis = []
num = 0
for i in range(len(strg)):
    s = strg[i]
    if s=="T": lis.append(s)
    elif s=="L": lis.append(s)
    elif s=="E": lis.append(s)
    else:
        num *= 10
        num += int(s)
        if i+1==len(strg) or (strg[i+1]=="T" or  strg[i+1]=="L" or strg[i+1]=="E"):
            lis.append(num)
            num = 0

ans = 0
index = 0
tp = 10 

def loop(num,ix):
    global lis,index,tp,ans
    index = ix
    while lis[index] != "E":
        n = lis[index]
        index += 1
        if n == "T": continue
        elif n == "L": loop(int(lis[index]),index+1)
        else:
            ans += abs(n-tp)
            tp = n
    if num!=1:
        loop(num-1,ix)
    else:
        index +=1
        return
               
def scan():
    global lis,ans,index,tp
    while index != len(lis):
        s = lis[index]
        index+=1
        if s == "T": continue
        elif s == "L": loop(int(lis[index]),index+1)
        else:
            ans += abs(s-tp)
            tp = s
scan()
print(ans)

我用遞迴解
也是40%



我的想法是L2T3T2T1=T3T2T1T3T2T1

                  (abs(a-b)+abs(b-c)*(Lx)+abs(headT-rearT)*(Lx-1)

但是打了好幾個小時都失敗

 
#35489: Re: Python40%解


s011388@fysh.tc.edu.tw (pollux)

School : 國立豐原高級中學
ID : 189768
IP address : [111.252.218.114]
Last Login :
2024-06-11 21:18:57
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [111.252.213.228] | Post Date : 2023-06-04 21:50

 

你的方法我也有想過,但太緊張直接放棄

假設L2T10T11T12
掃描完T10T11T12後
我直接將指針指回最前面的T
這樣會不會調秒數後繼續爆🤣🤣

除了stack跟遞迴
路過大神有其他更快的方法嗎🤔

 
#35491: Re: Python40%解


s11104220@school.saihs.edu.tw (施同學)

School : 臺北市立松山高級工農職業學校
ID : 221254
IP address : [118.165.14.31]
Last Login :
2024-06-17 17:43:35
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [123.193.213.137] | Post Date : 2023-06-04 21:55

 

你的方法我也有想過,但太緊張直接放棄

假設L2T10T11T12
掃描完T10T11T12後
我直接將指針指回最前面的T
這樣會不會調秒數後繼續爆🤣🤣

除了stack跟遞迴
路過大神有其他更快的方法嗎🤔

我在考場連讓程式解讀T1L2T2ET3T4的方法都不知道

 
#35493: Re: Python40%解


s11104220@school.saihs.edu.tw (施同學)

School : 臺北市立松山高級工農職業學校
ID : 221254
IP address : [118.165.14.31]
Last Login :
2024-06-17 17:43:35
k733. 3. 磁軌移動序列 -- 2023年6月APCS | From: [123.193.213.137] | Post Date : 2023-06-04 21:59

當時被第二題錯誤的測資搞到心態沒了

看到第三題 第四題也不想做了

 
ZeroJudge Forum