https://www.acmicpc.net/problem/20159
20159번: 동작 그만. 밑장 빼기냐?
카드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 단, N은 짝수이다. 둘째 줄에 카드의 윗장부터 밑장까지 카드의 값 X (1 ≤ X ≤ 10,000)이 정수로 주어진다.
www.acmicpc.net
누적합을 사용하는 문제였습니다.
문제에서 저도 헷갈린 조건이 있었는데 밑장이란 현재 윗장인 카드의 바로 밑에 있는 카드가 아닌
맨 밑의 카드를 뜻하는 것이었습니다.(-_-)
밑장을 분배하는 순간 이 후 예정되어있던 분배순서가 정훈이와 상대가 바뀌게 됩니다. 이를 누적합을 통해
순서대로 분배를 탐색하면서 현재 밑장으로 바꿀때 합이 어떻게 되는지 계산하면됩니다.
정훈이 차례일경우 여태까지 정훈이가 받은 카드들의 합 (현재 분배제외) + 이후 상대가 받을 카드의 합
상대의 차례일경우 여태까지 정훈이가 받은 카드들의 합 + 이후 상대가 받을 카드의합 - 밑장
#include<stdio.h>
#include<vector>
#include<queue>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int N;
int arr[100004];
int o[100004];
int e[100004];
int main(){
int mx=0;
scanf("%i",&N);
for(int x=2;x<N+2;x++){
scanf("%i",&arr[x]);
if(x%2==0) {
mx+=arr[x];
e[x]+=e[x-2]+arr[x];
}
else o[x]+=o[x-2]+arr[x];
}
for(int x=2;x<N+2;x++){
if(x%2==0) mx=max(e[x-2]+o[N+1]-o[x-1],mx);
if(x%2==1) mx=max(e[x-1]+o[N-1]-o[x-2],mx);
}
printf("%i",mx);
}
'PS > boj' 카테고리의 다른 글
백준 20437 문자열 게임 2 (0) | 2023.01.06 |
---|---|
백준 11952 좀비 (0) | 2023.01.05 |
백준 25200 곰곰이와 자판기 (0) | 2023.01.05 |
백준 24229 모두싸인 출근길 (0) | 2023.01.04 |
백준 20168 골목 대장 호석 - 기능성 (0) | 2023.01.03 |