結果

問題 No.1292 パタパタ三角形
ユーザー uni_pythonuni_python
提出日時 2020-12-11 23:49:05
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 195 ms / 2,000 ms
コード長 2,286 bytes
コンパイル時間 190 ms
コンパイル使用メモリ 81,692 KB
実行使用メモリ 106,912 KB
最終ジャッジ日時 2023-10-20 01:48:49
合計ジャッジ時間 2,657 ms
ジャッジサーバーID
(参考情報)
judge12 / judge11
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 43 ms
55,432 KB
testcase_01 AC 42 ms
55,432 KB
testcase_02 AC 42 ms
55,432 KB
testcase_03 AC 41 ms
55,432 KB
testcase_04 AC 45 ms
55,432 KB
testcase_05 AC 41 ms
55,432 KB
testcase_06 AC 43 ms
55,432 KB
testcase_07 AC 144 ms
81,652 KB
testcase_08 AC 137 ms
81,080 KB
testcase_09 AC 182 ms
100,784 KB
testcase_10 AC 181 ms
100,788 KB
testcase_11 AC 195 ms
102,196 KB
testcase_12 AC 164 ms
106,704 KB
testcase_13 AC 160 ms
106,912 KB
testcase_14 AC 95 ms
76,276 KB
testcase_15 AC 95 ms
76,272 KB
testcase_16 AC 89 ms
76,236 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))


"""
三角形のマスを考える,xy座標を当てはめる
上下左右のうち,形態によっていけない宝庫王が一箇所ある

デフォルトが
a△b
 c
なら,a:(-1,0),b:(1,0),c:(0,-1)で上にはいけない
"""

S=input()
#LRUD
ML=[(-1,0),(1,0),(0,1),(0,-1)]

# a,b,cに動きを割り当てる
L=[0,1,3]# デフォルトはこの並び

from collections import defaultdict
dd = defaultdict(int)
dd[(0,0)]=1

#今の座標
x=0
y=0

for c in S:
    num=ord(c)-ord("a")
    move_num=L[num]
    move=ML[move_num]#どの移動を選んだか
    x+=move[0]
    y+=move[1]
    
    dd[(x,y)]=1
    
    nL=[0,0,0]
    if move_num==2 or move_num==3:
        # 上下に動く場合,上下方向の移動だけ反転する,左右は変わらず
        for i in range(3):
            if L[i]==2:
                nL[i]=3
            elif L[i]==3:
                nL[i]=2
            else:
                nL[i]=L[i]
    
    # 左に動く場合
    elif move_num==0:
        for i in range(3):
            if L[i]==0:#左移動が右移動になる
                nL[i]=1
            elif L[i]==1:#右移動が上下移動どちらかになる
                if 2 in L:#上移動があれば,下移動が生まれる
                    nL[i]=3
                else:#下移動があれば,上移動が生まれる
                    nL[i]=2
            else:#上下移動は左移動になる
                nL[i]=0

    
    # 右に動く場合
    elif move_num==1:
        for i in range(3):
            if L[i]==1:#右移動が左移動になる
                nL[i]=0
            elif L[i]==0:#左移動が上下移動どちらかになる
                if 2 in L:#上移動があれば,下移動が生まれる
                    nL[i]=3
                else:#下移動があれば,上移動が生まれる
                    nL[i]=2
            else:#上下移動は右移動になる
                nL[i]=1
                
    for i in range(3):
        L[i]=nL[i]
    
    # print(x,y,":",num,move_num,move)
    # print(move_num)
    # print(L)

ans=0
for k,v in dd.items():
    # print(k)
    ans+=1
print(ans)
0