반응형
https://codeup.kr/problem.php?id=4752
회전 초밥(고등)
첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 $N$ , 초밥의 가짓수 $d$, 연속해서 먹는 접시의 수 $k$,쿠폰 번호 $c$가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, $2<=N<=3,000,000 , 2<=d<=3,000
codeup.kr
1차원 배열에 현재 index의 초밥을 확인하며 테이블 배열에 더하거나 빼주면 된다.
#include <stdio.h>
int AN[3000001];
int TABLE[3001] = {
0,
};
int IsOK(int type, int value)
{
if (type)
{
// plus
++TABLE[value];
if (TABLE[value] == 1)
return 1;
return 0;
}
else
{
// minus
--TABLE[value];
if (TABLE[value] == 0)
return -1;
return 0;
}
}
int main()
{
int N, d, k, c;
int BN, bn = 0;
int i;
scanf("%d %d %d %d", &N, &d, &k, &c);
// 0st input < bonus 'c' >
bn += IsOK(1, c);
for (i = 0; i < N; ++i)
{
scanf("%d", &AN[i]);
// first input < 0 ~ k >
if (i < k)
bn += IsOK(1, AN[i]);
}
// initialize Biggest Number
BN = bn;
// second input < k ~ N+k >
for (i = k; i < N + k; ++i)
{
if (i < N)
{
bn += IsOK(0, AN[i - k]);
bn += IsOK(1, AN[i]);
}
else
{
bn += IsOK(0, AN[i - k]);
bn += IsOK(1, AN[i - N]);
}
// compare Biggest Number
if (BN < bn)
BN = bn;
}
// answer
printf("%d\n", BN);
return 0;
}
반응형
'ACM준비 > 기타' 카테고리의 다른 글
DEVDAY2013 계단 (0) | 2015.01.08 |
---|---|
Playing with Wheels (0) | 2015.01.08 |
Bicoloring (0) | 2015.01.08 |
Complete Tree Labeling (0) | 2015.01.08 |
Self-describing Sequence (0) | 2015.01.08 |