def getHalf(d,s,t): now=0 for i,j in enumerate(s): if j==1: now+=d[i] if now==t//2: return s elif now>t//2: return None else: if len(s)==len(d): return None s1=s[:] s1.append(1) s2=s[:] s2.append(2) output1=getHalf(d,s1,t) if output1==None: return getHalf(d,s2,t) else: return output1 def printOutput(indices,d): left=[] right=[] for i,j in enumerate(indices): if j==1: left.append(i) else: right.append(i) m=d[left[0]] n=d[right[0]] while True: print("%d %d"%(left[0]+1,right[0]+1)) m-=1 n-=1 if m==0 and len(left)==1: break if m==0: left.pop(0) m=d[left[0]] if n==0: right.pop(0) n=d[right[0]] n=int(input()) d=list(map(int,input().split())) s=sum(d) if s % 2 !=0: print(-1) else: indices=getHalf(d,[],s) if indices==None: print(-1) else: indices=indices+[0]*(len(d)-len(indices)) print(s//2) printOutput(indices,d)
getHalf找到总和为一半的列表索引集,根据索引集输出结果