직대딩 블로그

BOJ 2531번 회전 초밥 본문

알고리즘/백준 온라인 저지

BOJ 2531번 회전 초밥

Jae Yeon 2023. 2. 12. 22:49

문제 링크 : https://www.acmicpc.net/problem/2531

 

2531번: 회전 초밥

첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤

www.acmicpc.net

회전 초밥의 범위를 나타내는 배열을 하나 만들어주고,

어떤걸 먹었는지 반복문을 통해 표시해주면 된다.

 

#include<stdio.h>
#include<algorithm>
int n, d, k, c, cnt;
int a[33005], vst[33005];
void ins(int go) 
{
	if (!vst[go]) cnt++;
	vst[go]++;
}
void del(int go) 
{
	vst[go]--;
	if (!vst[go]) cnt--;
}
int main() 
{
	scanf("%d %d %d %d", &n, &d, &k, &c);
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	for (int i = 0; i < k - 1; i++) a[i + n] = a[i];
	ins(c);
	for (int i = 0; i < k - 1; i++) ins(a[i]);
	int ans = 0;
	for (int i = 0; i < n; i++) 
    {
		ins(a[i + k - 1]);
		ans = std::max(ans, cnt);
		del(a[i]);
	}
	printf("%d", ans);
}

 

'알고리즘 > 백준 온라인 저지' 카테고리의 다른 글

BOJ 10845번 큐  (0) 2023.02.17
BOJ 17427번 약수의 합 2  (0) 2023.02.16
BOJ 10159번 저울  (0) 2023.02.16
BOJ 20366번 같이 눈사람 만들래?  (0) 2023.02.13
BOJ 6588번 골드바흐의 추측  (0) 2023.02.12
Comments