""" 作戦 0: 全テストケース固定の解答 作戦 1: (N-1) 個同じ離散振り子 作戦 2: 時間いっぱいランダム 作戦 3: 山登り """ #================================================== # 関数部 def General_Binary_Increase_Search_Integer(L, R, cond, default=None): """ 条件式が単調増加であるとき, 整数上で二部探索を行う. L: 解の下限 R: 解の上限 cond: 条件(1変数関数, 広義単調増加を満たす) default: Lで条件を満たさないときの返り値 """ if not(cond(R)): return default if cond(L): return L R+=1 while R-L>1: C=L+(R-L)//2 if cond(C): R=C else: L=C return R def move(start,direction,time): return start+direction*time def position(B,M,E,T): if E==0: M=B E=1 H=(B-M)//E F=2*B*H-E*H*H if T0: T-=(B-H*E)+M q,r=divmod(T,2*M) direction=pow(-1,H+2+q) start=pow(-1,H+1+q)*M return move(start,direction,r) else: return 0 def score_confrontation(X): X=[position(i,T) for i in range(N)] R_sum=0 for i in range(N): for k in range(i+1,N): R_sum+=abs(X[i]-X[k])/(B[i]+B[k]) coef=pow(10,7)*(2/(N*(N-1))) return round(coef*R_sum) def score_cooperation(T: int): X=[position(i,T) for i in range(N)] H=max(X)-min(X) alpha=sqrt(H/20+1) return round(pow(10,7)/alpha) def debug(*message): print(*message,file=sys.stderr) #================================================== # インポート from time import * from math import sqrt from random import * import sys #================================================== # 入力 N,K=map(int,input().split()) T=list(map(int,input().split())) U=list(map(int,input().split())) #================================================== FIRST_PHASE=1.400 SECOND_PHASE=0.400 B=[0]*N; M=[0]*N; E=[0]*N X=[[0]*N for _ in range(K)] Y=[[0]*N for _ in range(K)] #================================================== # 第 1 部 BEGIN_TIME=time() best_score=-1 while time()-BEGIN_TIME