Submission #1043202

#TimeUsernameProblemLanguageResultExecution timeMemory
1043202model_codeCircle Passing (EGOI24_circlepassing)Pypy 3
100 / 100
468 ms75140 KiB
#!/usr/bin/python3 n,m,q, = [int(x) for x in input().split()] a = [int(x) for x in input().split()] am = a + [ai+n for ai in a] def dist(x,y): return min((y-x)%(2*n),(x-y)%(2*n)) def lower(i): if i < a[0]: return am[-1] l=0 # l is <= h=2*m # h is > while l!=h-1: mid=(l+h)//2 if am[mid]<= i: l = mid else: h = mid return am[l] def higher(i): if i > am[-1]: # gives full points if this is a TODO improve testdata return am[0] l=-1 #l is always lower h=2*m-1 #h is always >= while l!=h-1: mid=(l+h)//2+(l+h)%2 # make sure to round up if am[mid]>=i: h=mid else: l=mid return am[h] for _ in range(q): x,y = [int(z) for z in input().split()] if m==0: print(dist(x,y)) continue xl = lower(x) xh = higher(x) yl = lower(y) yh = higher(y) print(min(dist(x,y),dist(xl,x)+1+dist((xl+n)%(2*n),y),dist(xh,x)+1+dist((xh+n)%(2*n),y),dist(yl,y)+1+dist((yl+n)%(2*n),x),dist(yh,y)+1+dist((yh+n)%(2*n),x)))
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...