1365

1101 ワード

答えを出す.
左の電線が右の電線の番号より大きいという意味です.(1->2,2->3,3->4,4->1の場合、4->1の電線が残りの電線を通過する)リストに入力し、このような状況がどれだけあるかを特定します.反復器iは左電線番号であるため、i回りに回転するときのiインデックスの値がiより小さい場合、res+=1
import sys
n = int(input())
arr = list(map(int, sys.stdin.readline().split()))
res = 0
for i in range(len(arr)):
    if arr[i] < i:
        res += 1
  

print(res) 
エラー:左の番号が次の索引コードより大きい番号に接続されている場合、ワイヤがねじれます.
説明する.
正しい接続線を見つけます.
右連の番号をもらって、インデックスが増えるにつれて値が増えても困るので、番号が大きくならないまで数えておけばいいのです
import sys
input = sys.stdin.readline

def binary_search(left, right, target):

    while left < right:
        mid = (left + right) // 2
        if lis[mid] < target:
            left = mid + 1
        else:
            right = mid
    return right
    
N = int(input())
numbers = list(map(int, input().split()))
lis = []
lis.append(numbers[0])

for i in range(1, N):
    if lis[-1] < numbers[i]:
        lis.append(numbers[i])
    else:
        j = binary_search(0, len(lis)-1, numbers[i])
        lis[j] = numbers[i]

print(N - len(lis))