結果

問題 No.1226 I hate Robot Arms
ユーザー uni_pythonuni_python
提出日時 2020-09-13 00:31:16
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,471 ms / 2,000 ms
コード長 2,659 bytes
コンパイル時間 288 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 197,764 KB
最終ジャッジ日時 2025-01-02 15:09:58
合計ジャッジ時間 33,766 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 40 ms
53,120 KB
testcase_01 AC 43 ms
54,400 KB
testcase_02 AC 578 ms
99,160 KB
testcase_03 AC 672 ms
111,840 KB
testcase_04 AC 770 ms
147,508 KB
testcase_05 AC 727 ms
148,288 KB
testcase_06 AC 1,395 ms
191,884 KB
testcase_07 AC 537 ms
100,948 KB
testcase_08 AC 382 ms
125,296 KB
testcase_09 AC 841 ms
128,628 KB
testcase_10 AC 298 ms
85,692 KB
testcase_11 AC 826 ms
148,748 KB
testcase_12 AC 570 ms
114,996 KB
testcase_13 AC 466 ms
134,448 KB
testcase_14 AC 1,072 ms
137,064 KB
testcase_15 AC 312 ms
124,132 KB
testcase_16 AC 1,371 ms
191,460 KB
testcase_17 AC 530 ms
106,596 KB
testcase_18 AC 426 ms
101,664 KB
testcase_19 AC 892 ms
154,264 KB
testcase_20 AC 804 ms
147,572 KB
testcase_21 AC 1,090 ms
159,568 KB
testcase_22 AC 1,367 ms
195,568 KB
testcase_23 AC 1,406 ms
195,388 KB
testcase_24 AC 1,435 ms
195,848 KB
testcase_25 AC 1,471 ms
197,764 KB
testcase_26 AC 1,390 ms
193,928 KB
testcase_27 AC 1,205 ms
177,776 KB
testcase_28 AC 1,218 ms
178,044 KB
testcase_29 AC 1,205 ms
179,824 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input=sys.stdin.readline
def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))

def main():
    from math import sin,cos,pi
    PI=pi
    class Segtree:
        def __init__(self, A, ide_ele, initialize = True, segf = max):
            self.N = len(A)
            self.N0 = 2**(self.N-1).bit_length()
            self.ide_ele = ide_ele
            self.segf = segf
            if initialize:
                self.data = [ide_ele]*self.N0 + A + [ide_ele]*(self.N0 - self.N)
                for i in range(self.N0-1, 0, -1):
                    self.data[i] = self.segf(self.data[2*i], self.data[2*i+1]) 
            else:
                self.data = [ide_ele]*(2*self.N0)

        def update(self, k, x):
            k += self.N0
            self.data[k] = x
            while k > 0 :
                k = k >> 1
                self.data[k] = self.segf(self.data[2*k], self.data[2*k+1])
                
        def query(self, l, r):
            L, R = l+self.N0, r+self.N0
            s = self.ide_ele
            t = self.ide_ele
            while L < R:
                if L & 1:
                    s = self.segf(s,self.data[L])
                    L += 1
                if R & 1:
                    R -= 1
                    t = self.segf(self.data[R],t)
                L >>= 1
                R >>= 1
            return self.segf(s,t)
        
    def ch(X):
        return (X*PI)/180

    def func(a,b):
        [x1,y1],t1 = a
        [x2,y2],t2 = b
        
        x=x1 + x2*cos(t1) - y2*sin(t1)
        y=y1 + x2*sin(t1) + y2*cos(t1)

        th=(t1+t2)
        # print("a:",a,"  b:",b)
        # print([[x,y],th*180/PI])
        return [[x,y],th]
    
    N,Q=MI()
    A=[[[1,0],0]for _ in range(N)]
    seg=Segtree(A, [[0,0],0], segf=func)
    ds=[1]*N
    ths=[0]*N
    
    for _ in range(Q):
        q=LI()
        if q[0]==0:
            i=q[1]-1
            th=ch(q[2])
            ths[i]=th
            dn=ds[i]
            v=[dn*cos(th),dn*sin(th)]
            seg.update(i,[v,th])
            
        elif q[0]==1:
            i=q[1]-1
            d=q[2]
            ds[i]=d
            thn=ths[i]
            v=[d*cos(thn), d*sin(thn)]
            
            seg.update(i,[v,thn])

        else:
            # print("++++++++++++++")
            i=q[1]-1
            vn,tn=seg.query(0,i+1)
            # print("++++",i,*vn,tn*180/PI,"++++")
            print(*vn)
            

            
    # for i in range(N):
    #     vn,thn=seg.query(i,i+1)
    #     print(vn,thn*180/PI)
            
            
                
            
        

main()
0