結果

問題 No.1292 パタパタ三角形
ユーザー uni_pythonuni_python
提出日時 2020-12-11 23:39:11
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,281 bytes
コンパイル時間 178 ms
コンパイル使用メモリ 82,780 KB
実行使用メモリ 115,028 KB
最終ジャッジ日時 2024-09-19 21:37:29
合計ジャッジ時間 2,852 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 39 ms
54,272 KB
testcase_01 AC 38 ms
53,632 KB
testcase_02 AC 39 ms
53,760 KB
testcase_03 WA -
testcase_04 AC 38 ms
54,272 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 AC 141 ms
107,288 KB
testcase_13 AC 147 ms
107,572 KB
testcase_14 AC 96 ms
76,800 KB
testcase_15 AC 96 ms
77,184 KB
testcase_16 WA -
権限があれば一括ダウンロードができます

ソースコード

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
    
    if move_num==2 or move_num==3:
        # 上下に動く場合,上下方向の移動だけ反転する,左右は変わらず
        for i in range(3):
            if L[i]==2:
                L[i]==3
            elif L[i]==3:
                L[i]=2
    
    # 左に動く場合
    elif move_num==0:
        nL=[0,0,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
        for i in range(3):
            L[i]=nL[i]
    
    # 右に動く場合
    elif move_num==1:
        nL=[0,0,0]
        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(L)

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