https://www.acmicpc.net/problem/13422
13422번: 도둑
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 마
www.acmicpc.net
[난이도] Gold4
[유형] 구간합
[풀이]
시작점이 0~N-1일때의 모둔 구간합을 구해주면 된다. 시작점을 바꿀때마다 구해줄 필요 없이
시작점이 i인 경우, 시작점이 i-1일때의 구간합에서 a[i-1]의 값을 빼고, a[(i+M-1)%N] 일때의 값만
더해주면 각 시작점마다 O(1)에 구할 수 있으므로 시간내에 해결이 가능하다.
#include <cstdio>
int tc,N,M,K,a[100000];
int main(){
scanf("%d",&tc);
while(tc--){
scanf("%d%d%d",&N,&M,&K);
for(int i=0;i<N;i++) scanf("%d",&a[i]);
int ans=0,sum=0;
for(int i=0;i<M;i++) sum+=a[i];
if(sum<K) ans++;
if(N!=M){
for(int i=1;i<N;i++){
sum-=a[i-1];
sum+=a[(i+M-1)%N];
if(sum<K) {
ans++;
}
}
}
printf("%d\n",ans);
}
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/13422.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 5913 : 준규와 사과 (C++) (0) | 2021.03.01 |
---|---|
[BOJ/백준][Gold4] 9081 : 단어 맞추기 (C++) (0) | 2021.03.01 |
[BOJ/백준][Gold4] 20058 : 마법사 상어와 파이어스톰 (C++) (0) | 2021.02.14 |
[BOJ/백준][Gold4] 12970 : AB (C++) (0) | 2021.02.14 |
[BOJ/백준][Gold4] 2550 : 전구 (C++) (0) | 2021.02.14 |