일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ucpc 2023 예선 d번
- 그리디
- html5
- router
- ccw 알고리즘
- insomnia
- MySQL
- 지금 자면 꿈을 꾸지만
- 백준 32029번
- ucpc 2024 예선 e번
- 자바스크립트
- HTTP
- Github
- ERD
- branch
- string
- 더 흔한 색칠 타일 문제
- pm2
- JavaScript
- MongoDB
- 백준 28303번
- Next
- 게임 서버 아키텍처
- Express.js
- PROJECT
- Prisma
- ucpc 2023 예선 i번
- localstorage
- 백준 32028번
- map
Archives
- Today
- Total
dh_0e
[PS] 자석 / C++ (백준 28303번) 본문
2023 UCPC 예선 I번 문제로, 누적 합을 사용하여 쉽게 풀 수 있는 문제이다.
해결 방법
SN 모양의 자석으로 누적 합을 구하며 에너지 충전량의 최댓값을 구한다. 이때, S극이 1, N극이 5라고 가정하고, S극의 소모값이 두 수의 차(4)에 K를 곱한 값보다 크다면 S극을 N-1(4)로 옮겨준다. 이외에 N-S가 1보다 크면 N극을 한 칸씩 옮겨준다. NS 모양의 자석도 똑같은 로직으로 최댓값을 구하여 자석을 배치했을 때 배터리의 에너지 변화의 최댓값을 구한다.
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cmath>
using namespace std;
int d[500001], rd[5000001];
int main()
{
int nn, k, s=1, n=2, answer=-2e9, c, des, rn;
scanf("%d %d", &nn, &k);
rn = nn;
for (int i = 1; i <= nn; i++)scanf("%d", &d[i]);
for (int i = 1; i <= nn; i++)rd[rn--] = d[i];
while (1) {
if (n == nn + 1)break;
c = d[n] - d[s] - (n - s) * k;
if (answer < c)answer = c;
if (n - s == 1)n++;
else {
des = n - 1;
if (d[s] - d[des] + (des - s) * k > 0) {
s = des;
}
else {
n++;
}
}
}
s = 1; n = 2;
while (1) {
if (n == nn + 1)break;
c = rd[n] - rd[s] - (n - s) * k;
if (answer < c)answer = c;
if (n - s == 1)n++;
else {
des = n - 1;
if (rd[s] - rd[des] + (des - s) * k > 0) {
s = des;
}
else {
n++;
}
}
}
printf("%d\n", answer);
return 0;
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[PS] 더 흔한 타일 색칠 문제 / C++ (백준 28298번) (0) | 2024.08.23 |
---|---|
[PS] 지금 자면 꿈을 꾸지만 / C++ (백준 32029번) (0) | 2024.08.21 |
[PS] 이진 검색 트리 복원하기 / C++ (백준 32028번) (0) | 2024.08.20 |
[PS] 세미나 배정 / C++ (백준 28305번) (0) | 2024.08.19 |
[PS] 동전 쌍 뒤집기 / C++ (백준 32034번) (0) | 2024.08.16 |