ABC136 C - Build Stairs에 시달린





사쿠토, 0,1,2,3,... 라고 차례로 해 가면 좋겠지?
그런 가벼운 마음이 고생의 시작. .

BuildStairs_r0.py
n = int(input())
X = list(map(int,input().split()))
from sys import exit

for j in range(n-1):# O(10^5)
    if X[j] > X[j+1]:
        X[j] -=1

for k in range(n-1):# O(10^5)
    if X[k] > X[k+1]:
        print("No")
        exit()
print("Yes")

왜 WA 모르겠어요. 구구라고 해도 모두, 뒤에서 시험하고 있다. . .
그런 자신에게 구원의 손이. .


test_case.py
#case1
4
1 2 2 1

#以下のケースも検討すべきだと思った。

#case2
4
1 3 3 2

상기를 바탕으로 재검토한다.

BuildStairs_r0.py
n = int(input())
X = list(map(int,input().split()))
from sys import exit

for j in range(n-1):# O(10^5)
    if X[j] > X[j+1]:#分岐条件
        X[j] -=1
    #前述の分岐条件を抜けたとしても、X[j] を下げないと
    #エッジケースを切り抜くことが出来ない。
    elif X[j-1] <= X[j]-1:
        X[j] -=1

for k in range(n-1):# O(10^5)
    if X[k] > X[k+1]:
        print("No")
        exit()
print("Yes")

했다 (울음). . 왜 안 되었는가. 알고 기쁘다. .

그때부터 시간이 지나서 완전히 잊은 상태로 재 챌린지
더러운 코드였지만 다녔다. 솔직하게 기쁘다.

abc136c.py
N = int(input())
H = list(map(int,input().split()))

#if 文で条件する場合、確実に分かることを少しずつ切り分けると
#整理しながら進めることが出来る。

REF = H[0]                             #Step1:比較する基準値、最初は H[0]
for i in range(N):                     
    if REF == H[i]:                    #Step2:基準値とH[i]が同じなら何もしなくて良い
        pass                           
    elif REF > H[i] and REF-H[i] > 1:  #Step3:基準値 > H[i] であり、かつ差分が 
        print("No")                    #      2以上なら手の施しようがない."No" として EXIT していい
        exit()                         
    elif H[i]-REF == 1:                #Step4:基準値とH[i]の差分が 1 なら引いておこう
        H[i] -= 1                      #      適当に見逃すと、コーナーケースを潰せない可能性が高い
    elif H[i]-REF > 1:                 #Step5:基準値とH[i]の差分が 2 以上なら、間違いなく
        H[i] -= 1                      #      H[i] -= 1 とした方がいい。じゃないと話が進まない(笑)
        REF = H[i]
#print(H)

for j in range(N-1):
    if H[j+1]-H[j]<0:
        print("No")
        exit()
print("Yes")

좋은 웹페이지 즐겨찾기