Problem:

コンテストTシャツ (Contest T-shirts)

Segtree 君は、 $M$ 枚のコンテストTシャツを持っています。

彼は今から $N$ 日間、コンテストTシャツだけで過ごそうと考え、$i = 1, 2, 3, \dots, N$ に対して「 $i$ 日目に $A_i$ 枚目のTシャツを着る」という $N$ 個の計画を立てました。

しかし、今の計画のままだと洗濯が間に合わない可能性があるので、必要に応じて計画を変更し、2日連続で同じ服を着ないようにしたいです。

変更する必要のある計画の個数の最小値を求めてください。なお、与えられた制約の元で、計画の変更によって必ず条件を満たすようにできることが証明できます。

入力

入力は以下の形式で標準入力から与えられる。

$M$ $N$
$A_1$ $A_2$ $\ldots$ $A_N$

出力

変更する必要のある計画の個数の最小値を出力してください。

ただし、最後には改行を入れること。

制約

    
$2 \leq M \leq 10^9$

    
$1 \leq N \leq 10^5$

    
$1 \leq A_i \leq M$

    
入力は全て整数である。

入力例1

2 3
2 2 1

出力例1

1

入力例2

3 6
1 1 1 2 2 3

出力例2

2



Sample input:
2 3
2 2 1


Sample output:
1

Submission status: Accepted

Solution code:
m,n = map(int,input().split())
a = list(map(int,input().split()))

if m == 2:
    ans = n
    for i in range(2):
        t = 0
        for j in range(n):
            idx = (i+j)%2 + 1
            if idx != a[j]:
                t += 1
        ans = min(ans, t)
else:
    ans = 0
    prev = a[0]
    for i in range(1,n):
        if prev == a[i]:
            ans += 1
            a[i] = -1
        prev = a[i]

print(ans)

Submission status: Accepted

Solution code:
from itertools import *
from bisect import *
from math import *
from collections import *
from heapq import *
from random import *
import sys

sys.setrecursionlimit(10 ** 6)
int1 = lambda x: int(x) - 1
p2D = lambda x: print(*x, sep="\n")
def II(): return int(sys.stdin.readline())
def MI(): return map(int, sys.stdin.readline().split())
def MI1(): return map(int1, sys.stdin.readline().split())
def MF(): return map(float, sys.stdin.readline().split())
def LI(): return list(map(int, sys.stdin.readline().split()))
def LI1(): return list(map(int1, sys.stdin.readline().split()))
def LF(): return list(map(float, sys.stdin.readline().split()))
def LLI(rows_number): return [LI() for _ in range(rows_number)]
dij = [(1, 0), (0, 1), (-1, 0), (0, -1)]

def main():
    m,n=MI()
    aa=LI()
    ans=0
    if m==2:
        for i,a in enumerate(aa):
            if i%2+1==a:ans+=1
        ans=min(ans,n-ans)
    else:
        cnt=1
        for a0,a1 in zip(aa,aa[1:]):
            if a0==a1:cnt+=1
            else:
                ans+=cnt//2
                cnt=1
        ans+=cnt//2
    print(ans)

main()

Submission status: Accepted

Solution code:
M, N = map(int,input().split())
A = list(map(int,input().split()))
if M >= 3:
    now = A[0]
    ans = 0
    for k in range(1,N):
        if A[k] == now:
            now = -1
            ans += 1
        else:
            now = A[k]
    print(ans)
else:
    now = A[0]
    ans1 = 0
    for k in range(1,N):
        if A[k] == now:
            now = 3-now
            ans1 += 1
        else:
            now = A[k]

    ans2 = 1
    now = 3-A[0]
    for k in range(1,N):
        if A[k] == now:
            now = 3-now
            ans2 += 1
        else:
            now = A[k]

    print(min(ans1,ans2))

Submission status: Accepted

Solution code:
m,n=map(int,input().split())
a=list(map(int,input().split()))
if m == 2:
  ans1=0
  for i in range(n):
    if i % 2 != a[i] % 2:
      ans1+=1
  ans2=0
  for i in range(n):
    if i % 2 == a[i] % 2:
      ans2+=1
  print(min(ans1,ans2))
else:
  ans=0
  for i in range(n-1):
    if a[i] == a[i+1]:
      a[i+1]=-1
      ans+=1
  print(ans)

Submission status: Accepted

Solution code:
m,n=map(int,input().split())
a=list(map(int,input().split()))
if m==2:
  x=y=0
  for i in range(n):
    b=i%2+1
    c=(i+1)%2+1
    if a[i]!=b:x+=1
    if a[i]!=c:y+=1
  print(min(x,y))
  exit()
x=0
for i in range(1,n):
  if a[i-1]==a[i]:a[i]=-1;x+=1
print(x)

Submission status: Accepted

Solution code:
import sys
input = sys.stdin.readline

M,N=map(int,input().split())
A=list(map(int,input().split()))

if M==2:
    ANS0=0
    ANS1=0

    for i in range(N):
        if A[i]%2==i%2:
            ANS0+=1
        else:
            ANS1+=1

    print(min(ANS0,ANS1))

else:
    A.append(10**10)
    count=0
    ANS=0

    for i in range(N+1):
        if A[i]==A[i-1]:
            count+=1
        else:
            ANS+=count//2
            count=1
    print(ANS)

Submission status: Accepted

Solution code:
M, N = map(int, input().split())
A = [int(i) for i in input().split()]

if M == 2 :
  a, b = 0, 0
  for i in range(N) :
    if (i % 2) == (A[i] % 2) :
      a += 1
    else :
      b += 1
  print(min(a, b))
  
else :
  ret = 0
  for i in range(1, N) :
    if A[i] == A[i - 1] :
      ret += 1
      A[i] = 0
      
  print(ret)