← Back to List

2531번: 회전 초밥 ↗

Solutions

Go
1.0 KB | 1060 chars
package main

import (
	"bufio"
	"fmt"
	"os"
)

var writer *bufio.Writer
var reader *bufio.Reader

func solve() {
	var N, d, k, c int
	fmt.Fscanln(reader, &N, &d, &k, &c)

	var l = make([]int, N+k)

	for i := 0; i < N; i++ {
		fmt.Fscanln(reader, &l[i])
	}

	for i := N; i < N+k; i++ {
		l[i] = l[i-N]
	}

	ans := 0

	cnt := map[int]int{}
	category_count := 0

	for i := 0; i < k; i++ {
		cnt[l[i]]++

		if cnt[l[i]] == 1 {
			category_count++
		}
	}

	if cnt[c] > 0 {
		ans = max(ans, category_count)
	} else {
		ans = max(ans, category_count+1)
	}

	for i := k; i < N+k; i++ {
		current := l[i]
		deleting := l[i-k]

		cnt[deleting]--
		if cnt[deleting] == 0 {
			category_count--
		}

		cnt[current]++
		if cnt[current] == 1 {
			category_count++
		}

		if cnt[c] > 0 {
			ans = max(ans, category_count)
		} else {
			ans = max(ans, category_count+1)
		}
		// fmt.Fprintln(writer, category_count, cnt)
	}
	fmt.Fprintln(writer, ans)
}

func main() {
	writer = bufio.NewWriter(os.Stdout)
	reader = bufio.NewReader(os.Stdin)
	defer writer.Flush()

	solve()

}