首先要對輸入資料進行處理
首先要對輸入資料進行處理
p,q,r,m = map(int,input().split())ip = [int(x) for x in input().split()] #記錄各輸入點的值gc = [int(x) for x in input().split()] #記錄各邏輯閘的種類g = [[-1,-1,0] for i in range(q)] #[a輸入端 b輸入端 Logic gates] -1=無gv = [-1 for i in range(q)] #紀錄個邏輯閘輸出值out = [] #紀錄輸出點 並由小到大排序to =[[] for i in range(m+1)] #記錄各點之間的關係邊輸入邊處理邏輯閘的數據for i in range(m):a,b = map(int,input().split())if b>p+q:out.append([a,b])elif b>p and b<=p+q:temp =b-(p+1)g[temp][2] = gc[temp]if g[temp][0]==-1:g[temp][0] = aelse:g[temp][1] = ato[b].append(a)out.sort(key=lambda x:x[1])這邊主要由輸出端往輸入端走訪 (如果從輸入端往輸出端走訪記錄延遲,會有邏輯閘空接的狀況)(請自行設計迴圈搭配find)#由output -> gate -> input 走訪記錄 最大延遲ans = 0 #設定一個delay最大值的紀錄def find(now,dp):global ansdp+=1for i in to[now]:if i>p:find(i,dp)ans = max(ans,dp)return#取得個邏輯閘輸出值這邊可以設計自訂函數傳入(接點a ,接點b,邏輯閘種類)提示:判斷接點為 前p個輸入點 或是 邏輯閘的輸出若是邏輯閘的輸出端點 可用gv[index] 去查找該點的值為何若尚未計算 則是將該接點編號-p 透過g[index]查找該邏輯閘並將資料傳入函數內計算以此類推。#最後整理輸出值
我是輸入往輸出走
算延遲是輸出往輸入
首先要對輸入資料進行處理
p,q,r,m = map(int,input().split())ip = [int(x) for x in input().split()] #記錄各輸入點的值gc = [int(x) for x in input().split()] #記錄各邏輯閘的種類g = [[-1,-1,0] for i in range(q)] #[a輸入端 b輸入端 Logic gates] -1=無gv = [-1 for i in range(q)] #紀錄個邏輯閘輸出值out = [] #紀錄輸出點 並由小到大排序to =[[] for i in range(m+1)] #記錄各點之間的關係邊輸入邊處理邏輯閘的數據for i in range(m):a,b = map(int,input().split())if b>p+q:out.append([a,b])elif b>p and b<=p+q:temp =b-(p+1)g[temp][2] = gc[temp]if g[temp][0]==-1:g[temp][0] = aelse:g[temp][1] = ato[b].append(a)out.sort(key=lambda x:x[1])這邊主要由輸出端往輸入端走訪 (如果從輸入端往輸出端走訪記錄延遲,會有邏輯閘空接的狀況)(請自行設計迴圈搭配find)#由output -> gate -> input 走訪記錄 最大延遲ans = 0 #設定一個delay最大值的紀錄def find(now,dp):global ansdp+=1for i in to[now]:if i>p:find(i,dp)ans = max(ans,dp)return#取得個邏輯閘輸出值這邊可以設計自訂函數傳入(接點a ,接點b,邏輯閘種類)提示:判斷接點為 前p個輸入點 或是 邏輯閘的輸出若是邏輯閘的輸出端點 可用gv[index] 去查找該點的值為何若尚未計算 則是將該接點編號-p 透過g[index]查找該邏輯閘並將資料傳入函數內計算以此類推。#最後整理輸出值我是輸入往輸出走
算延遲是輸出往輸入
我的程式碼(算延遲有改過 併入算邏輯的迴圈)
我的程式碼(算延遲有改過 併入算邏輯的迴圈)
def main():from sys import stdinp,q,r,m=map(int,stdin.readline().split())state=[0 for _ in range(p+q+r+1)]#0 1狀態lef=state.copy()#剩餘輸入數量md=state.copy()#最大距離state[1:p+1]=map(int,stdin.readline().split())#獲取輸入typ=tuple(map(int,stdin.readline().split()))#種類0 buffer 1 and 2 or 3 XOR 4 NOTkey=[[] for _ in range(p+q+r+1)]#輸入往輸出的編號con=[[] for _ in range(p+q+r+1)]#輸出往輸入的編號for _ in range(m):a,b=map(int,stdin.readline().split())lef[b]+=1#剩餘輸入數量+1key[a].append(b)#連接if p+q+1>b>p or con[b]==[]:con[b].append(a)#連接 前面判斷式可不寫 用來加速用t=[(i,0) for i in range(1,p+1)]while t:idx,dis=t.pop()for kid in key[idx]:#輸入端連接到的lef[kid]-=1if dis>md[kid]:md[kid]=dis#最大距離if lef[kid]==0:#如果閘的輸入01狀態都知道了t.append((kid,md[kid]+1))#新增到stackif p+q>=kid>p:tk=typ[kid-p-1]#如果是邏輯閘 則對應到typelse:tk=0#否則都是buffer或無功能if tk==0:state[kid]=state[con[kid][0]]elif tk==1:state[kid]=0for j in con[kid]:if state[j]==0:breakelse:state[kid]=1elif tk==2:state[kid]=1for j in con[kid]:if state[j]:breakelse:state[kid]=0elif tk==3:f=0for j in con[kid]:if state[j]:f+=1state[kid]=f%2elif tk==4:state[kid]=0 if state[con[kid][0]] else 1print(max(md[p+q+1:]))print(*state[p+q+1:])if __name__=="__main__":main()
我的類似 開啟寶盒 的做法
我的程式碼(算延遲有改過 併入算邏輯的迴圈)
def main():from sys import stdinp,q,r,m=map(int,stdin.readline().split())state=[0 for _ in range(p+q+r+1)]#0 1狀態lef=state.copy()#剩餘輸入數量md=state.copy()#最大距離state[1:p+1]=map(int,stdin.readline().split())#獲取輸入typ=tuple(map(int,stdin.readline().split()))#種類0 buffer 1 and 2 or 3 XOR 4 NOTkey=[[] for _ in range(p+q+r+1)]#輸入往輸出的編號con=[[] for _ in range(p+q+r+1)]#輸出往輸入的編號for _ in range(m):a,b=map(int,stdin.readline().split())lef[b]+=1#剩餘輸入數量+1key[a].append(b)#連接if p+q+1>b>p or con[b]==[]:con[b].append(a)#連接 前面判斷式可不寫 用來加速用t=[(i,0) for i in range(1,p+1)]while t:idx,dis=t.pop()for kid in key[idx]:#輸入端連接到的lef[kid]-=1if dis>md[kid]:md[kid]=dis#最大距離if lef[kid]==0:#如果閘的輸入01狀態都知道了t.append((kid,md[kid]+1))#新增到stackif p+q>=kid>p:tk=typ[kid-p-1]#如果是邏輯閘 則對應到typelse:tk=0#否則都是buffer或無功能if tk==0:state[kid]=state[con[kid][0]]elif tk==1:state[kid]=0for j in con[kid]:if state[j]==0:breakelse:state[kid]=1elif tk==2:state[kid]=1for j in con[kid]:if state[j]:breakelse:state[kid]=0elif tk==3:f=0for j in con[kid]:if state[j]:f+=1state[kid]=f%2elif tk==4:state[kid]=0 if state[con[kid][0]] else 1print(max(md[p+q+1:]))print(*state[p+q+1:])if __name__=="__main__":main()我的類似 開啟寶盒 的做法
我剛剛把con刪掉了 空間會少一點
首先要對輸入資料進行處理
p,q,r,m = map(int,input().split())ip = [int(x) for x in input().split()] #記錄各輸入點的值gc = [int(x) for x in input().split()] #記錄各邏輯閘的種類g = [[-1,-1,0] for i in range(q)] #[a輸入端 b輸入端 Logic gates] -1=無gv = [-1 for i in range(q)] #紀錄個邏輯閘輸出值out = [] #紀錄輸出點 並由小到大排序to =[[] for i in range(m+1)] #記錄各點之間的關係邊輸入邊處理邏輯閘的數據for i in range(m):a,b = map(int,input().split())if b>p+q:out.append([a,b])elif b>p and b<=p+q:temp =b-(p+1)g[temp][2] = gc[temp]if g[temp][0]==-1:g[temp][0] = aelse:g[temp][1] = ato[b].append(a)out.sort(key=lambda x:x[1])這邊主要由輸出端往輸入端走訪 (如果從輸入端往輸出端走訪記錄延遲,會有邏輯閘空接的狀況)(請自行設計迴圈搭配find)#由output -> gate -> input 走訪記錄 最大延遲ans = 0 #設定一個delay最大值的紀錄def find(now,dp):global ansdp+=1for i in to[now]:if i>p:find(i,dp)ans = max(ans,dp)return#取得個邏輯閘輸出值這邊可以設計自訂函數傳入(接點a ,接點b,邏輯閘種類)提示:判斷接點為 前p個輸入點 或是 邏輯閘的輸出若是邏輯閘的輸出端點 可用gv[index] 去查找該點的值為何若尚未計算 則是將該接點編號-p 透過g[index]查找該邏輯閘並將資料傳入函數內計算以此類推。#最後整理輸出值我用python寫 也是從輸入點用DFS走訪到輸出點 並記錄最大延遲還有記錄各點的值
但只拿到10% 後面都TLE
請問怎麼各位大神怎麼優化的🙏
首先要對輸入資料進行處理
p,q,r,m = map(int,input().split())ip = [int(x) for x in input().split()] #記錄各輸入點的值gc = [int(x) for x in input().split()] #記錄各邏輯閘的種類g = [[-1,-1,0] for i in range(q)] #[a輸入端 b輸入端 Logic gates] -1=無gv = [-1 for i in range(q)] #紀錄個邏輯閘輸出值out = [] #紀錄輸出點 並由小到大排序to =[[] for i in range(m+1)] #記錄各點之間的關係邊輸入邊處理邏輯閘的數據for i in range(m):a,b = map(int,input().split())if b>p+q:out.append([a,b])elif b>p and b<=p+q:temp =b-(p+1)g[temp][2] = gc[temp]if g[temp][0]==-1:g[temp][0] = aelse:g[temp][1] = ato[b].append(a)out.sort(key=lambda x:x[1])這邊主要由輸出端往輸入端走訪 (如果從輸入端往輸出端走訪記錄延遲,會有邏輯閘空接的狀況)(請自行設計迴圈搭配find)#由output -> gate -> input 走訪記錄 最大延遲ans = 0 #設定一個delay最大值的紀錄def find(now,dp):global ansdp+=1for i in to[now]:if i>p:find(i,dp)ans = max(ans,dp)return#取得個邏輯閘輸出值這邊可以設計自訂函數傳入(接點a ,接點b,邏輯閘種類)提示:判斷接點為 前p個輸入點 或是 邏輯閘的輸出若是邏輯閘的輸出端點 可用gv[index] 去查找該點的值為何若尚未計算 則是將該接點編號-p 透過g[index]查找該邏輯閘並將資料傳入函數內計算以此類推。#最後整理輸出值
我用python寫 也是從輸入點用DFS走訪到輸出點 並記錄最大延遲還有記錄各點的值
但只拿到10% 後面都TLE
請問怎麼各位大神怎麼優化的🙏
首先要對輸入資料進行處理
p,q,r,m = map(int,input().split())ip = [int(x) for x in input().split()] #記錄各輸入點的值gc = [int(x) for x in input().split()] #記錄各邏輯閘的種類g = [[-1,-1,0] for i in range(q)] #[a輸入端 b輸入端 Logic gates] -1=無gv = [-1 for i in range(q)] #紀錄個邏輯閘輸出值out = [] #紀錄輸出點 並由小到大排序to =[[] for i in range(m+1)] #記錄各點之間的關係邊輸入邊處理邏輯閘的數據for i in range(m):a,b = map(int,input().split())if b>p+q:out.append([a,b])elif b>p and b<=p+q:temp =b-(p+1)g[temp][2] = gc[temp]if g[temp][0]==-1:g[temp][0] = aelse:g[temp][1] = ato[b].append(a)out.sort(key=lambda x:x[1])這邊主要由輸出端往輸入端走訪 (如果從輸入端往輸出端走訪記錄延遲,會有邏輯閘空接的狀況)(請自行設計迴圈搭配find)#由output -> gate -> input 走訪記錄 最大延遲ans = 0 #設定一個delay最大值的紀錄def find(now,dp):global ansdp+=1for i in to[now]:if i>p:find(i,dp)ans = max(ans,dp)return#取得個邏輯閘輸出值這邊可以設計自訂函數傳入(接點a ,接點b,邏輯閘種類)提示:判斷接點為 前p個輸入點 或是 邏輯閘的輸出若是邏輯閘的輸出端點 可用gv[index] 去查找該點的值為何若尚未計算 則是將該接點編號-p 透過g[index]查找該邏輯閘並將資料傳入函數內計算以此類推。#最後整理輸出值
我用python寫 也是從輸入點用DFS走訪到輸出點 並記錄最大延遲還有記錄各點的值
但只拿到10% 後面都TLE
請問怎麼各位大神怎麼優化的🙏
程式碼?
你可能時間複雜度太高
首先要對輸入資料進行處理
p,q,r,m = map(int,input().split())ip = [int(x) for x in input().split()] #記錄各輸入點的值gc = [int(x) for x in input().split()] #記錄各邏輯閘的種類g = [[-1,-1,0] for i in range(q)] #[a輸入端 b輸入端 Logic gates] -1=無gv = [-1 for i in range(q)] #紀錄個邏輯閘輸出值out = [] #紀錄輸出點 並由小到大排序to =[[] for i in range(m+1)] #記錄各點之間的關係邊輸入邊處理邏輯閘的數據for i in range(m):a,b = map(int,input().split())if b>p+q:out.append([a,b])elif b>p and b<=p+q:temp =b-(p+1)g[temp][2] = gc[temp]if g[temp][0]==-1:g[temp][0] = aelse:g[temp][1] = ato[b].append(a)out.sort(key=lambda x:x[1])這邊主要由輸出端往輸入端走訪 (如果從輸入端往輸出端走訪記錄延遲,會有邏輯閘空接的狀況)(請自行設計迴圈搭配find)#由output -> gate -> input 走訪記錄 最大延遲ans = 0 #設定一個delay最大值的紀錄def find(now,dp):global ansdp+=1for i in to[now]:if i>p:find(i,dp)ans = max(ans,dp)return#取得個邏輯閘輸出值這邊可以設計自訂函數傳入(接點a ,接點b,邏輯閘種類)提示:判斷接點為 前p個輸入點 或是 邏輯閘的輸出若是邏輯閘的輸出端點 可用gv[index] 去查找該點的值為何若尚未計算 則是將該接點編號-p 透過g[index]查找該邏輯閘並將資料傳入函數內計算以此類推。#最後整理輸出值
我用python寫 也是從輸入點用DFS走訪到輸出點 並記錄最大延遲還有記錄各點的值
但只拿到10% 後面都TLE
請問怎麼各位大神怎麼優化的🙏程式碼?
你可能時間複雜度太高
程式碼在這 再請各位大神給意見🙏
然後我上面好像打錯了 我是從輸出點走訪到輸入點 跟原po一樣