結果

問題 No.1292 パタパタ三角形
ユーザー uni_pythonuni_python
提出日時 2020-12-11 23:49:05
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 166 ms / 2,000 ms
コード長 2,286 bytes
コンパイル時間 142 ms
コンパイル使用メモリ 82,464 KB
実行使用メモリ 107,480 KB
最終ジャッジ日時 2024-09-19 21:37:32
合計ジャッジ時間 2,390 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 46 ms
54,016 KB
testcase_01 AC 39 ms
53,504 KB
testcase_02 AC 40 ms
53,760 KB
testcase_03 AC 39 ms
53,760 KB
testcase_04 AC 40 ms
53,760 KB
testcase_05 AC 44 ms
54,528 KB
testcase_06 AC 40 ms
53,888 KB
testcase_07 AC 133 ms
82,020 KB
testcase_08 AC 131 ms
81,792 KB
testcase_09 AC 163 ms
101,724 KB
testcase_10 AC 166 ms
101,296 KB
testcase_11 AC 163 ms
102,748 KB
testcase_12 AC 148 ms
107,480 KB
testcase_13 AC 143 ms
107,440 KB
testcase_14 AC 91 ms
76,800 KB
testcase_15 AC 88 ms
76,800 KB
testcase_16 AC 82 ms
76,756 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