結果

問題 No.5009 Draw A Convex Polygon
ユーザー titiatitia
提出日時 2022-12-02 06:05:05
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,241 bytes
コンパイル時間 966 ms
実行使用メモリ 106,064 KB
スコア 0
平均クエリ数 60333.00
最終ジャッジ日時 2022-12-02 06:05:08
合計ジャッジ時間 2,728 ms
ジャッジサーバーID
(参考情報)
judge15 / judge13
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

from math import sqrt

M=10**9
ANS=[(0,M)]
N=20000

while len(ANS)<N and ANS[-1][0]<10**9-100:
    NG=ANS[-1][0]+1000
    OK=min(M,NG+100000)

    while OK>NG+1:
        mid=(OK+NG)//2

        y=round(sqrt(M*M-mid*mid))
        if y<ANS[-1][1]-100:
            OK=mid
        else:
            NG=mid

    ANS.append((OK,round(sqrt(M*M-OK*OK))))

from operator import itemgetter
P=ANS

P.sort(key=itemgetter(1)) # 一番左下の点から始める。
P.sort(key=itemgetter(0))

# 上側凸包と下側凸包
Q1=[]
Q2=[]
 
def outer_product(x,y,z,w):
    return x*w-y*z
 
for x,y in P:
    while True:
        if len(Q1)<2:
            break
 
        s,t=Q1[-1]
        u,v=Q1[-2]
 
        if outer_product(u-s,v-t,x-u,y-v)<0:
            Q1.pop()
        else:
            break
 
    Q1.append((x,y))

Q2.reverse()
Q=Q1[1:]

#print(Q)

ANS=[]

for i in range(len(Q)):
    x,y=Q[i]
    ANS.append(str(x)+" "+str(y))

for i in range(len(Q)):
    z,w=Q[-1-i]
    ANS.append(str(z)+" "+str(-w))

for i in range(len(Q)):
    x,y=Q[i]
    ANS.append(str(-x)+" "+str(-y))

for i in range(len(Q)):
    z,w=Q[-1-i]
    ANS.append(str(-z)+" "+str(w))


n=10**6
ANS=ANS[:n]
ANS.reverse()
print(len(ANS),flush=True)
print("\n".join(ANS),flush=True)
0