https://www.acmicpc.net/problem/10025
10025๋ฒ: ๊ฒ์ผ๋ฅธ ๋ฐฑ๊ณฐ
์ฒซ ์ค์ ์ ์ N๊ณผ K๊ฐ ๋ค์ด์จ๋ค. ๋์งธ ์ค๋ถํฐ N์งธ ์ค๊น์ง, ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ๊ฐ ์๋์ด์ ์ผ์์ ์์ ๋ํ๋ด๋ gi์ ์๋์ด์ ์ขํ๋ฅผ ๋ํ๋ด๋ xi๊ฐ ์ฃผ์ด์ง๋ค.
www.acmicpc.net
๋ฌธ์
๋์ด ์ฌ๋ฆ๋ ๋๋ฌผ์์ ๋ฐฑ๊ณฐ ์จ๋ฒํธ๋ ๋๋ฌด ๋์์ ๊ผผ์ง๋ ํ๊ธฐ ์ซ๋ค. ๋คํํ๋ ์ฌ์ก์ฌ๋ค์ด ์จ๋ฒํธ์ ๋์๋ฅผ ์ํ๊ธฐ ์ํด ์ผ์์ด ๋ด๊ธด ์๋์ด๋ค์ ๊ฐ์ ธ๋ค ์ฃผ์๋ค. ์จ๋ฒํธ๊ฐ ๊ฐ์ฅ ์ ์ ๊ฑฐ๋ฆฌ๋ง ์์ง์ด๊ณ ๋ ์ต๋ํ ๋ง์ ์ผ์์ผ๋ก ๋์๋ฅผ ์ํ ์ ์๋๋ก ๋์์ฃผ์.
์ฐ๋ฆฌ ์์ 1์ฐจ์ ๋ฐฐ์ด๋ก ์๊ฐํ๋ฉฐ, ์ด N(1 ≤ N ≤ 100000)๊ฐ์ ์ผ์ ์๋์ด๋ค์ด xi(0 ≤ xi ≤ 1,000,000)์ขํ๋ง๋ค ๋์ฌ ์๊ณ ๊ฐ ์๋์ด ์์๋ gi(1 ≤ gi ≤ 10,000)์ฉ์ ์ผ์์ด ๋ค์ด ์๋ค. ์ผ๋จ ์จ๋ฒํธ๊ฐ ์๋ฆฌ๋ฅผ ์ก์ผ๋ฉด ๊ทธ๋ก๋ถํฐ ์ข์ฐ๋ก K(1 ≤ K ≤ 2,000,000) ๋งํผ ๋จ์ด์ง ์๋์ด๊น์ง ๋ฟ์ ์ ์๋ค. ์จ๋ฒํธ๋ ์๋์ด๊ฐ ๋์ฌ ์๋ ์๋ฆฌ์๋ ์๋ฆฌ์ก์ ์ ์๋ค. ๋ชจ๋ ์ผ์ ์๋์ด์ ์์น๋ ๋ค๋ฅด๋ค.
์จ๋ฒํธ๊ฐ ์ต์ ์ ์๋ฆฌ๋ฅผ ๊ณจ๋์ ๋ ์ผ์์ ํฉ์ ๊ตฌํ์์ค. ์ฆ, ์ผ์๋ค์ ํฉ์ ์ต๋๊ฐ์ ๊ตฌํด์ผ ํ๋ค.
์ ๋ ฅ
์ฒซ ์ค์ ์ ์ N๊ณผ K๊ฐ ๋ค์ด์จ๋ค. ๋์งธ ์ค๋ถํฐ N์งธ ์ค๊น์ง, ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ๊ฐ ์๋์ด์ ์ผ์์ ์์ ๋ํ๋ด๋ gi์ ์๋์ด์ ์ขํ๋ฅผ ๋ํ๋ด๋ xi๊ฐ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์จ๋ฒํธ๊ฐ ํํ ์ต์ ์์น๋ก๋ถํฐ K๋งํผ ๋จ์ด์ง ๊ฑฐ๋ฆฌ ๋ด์ ์๋ ์ผ์๋ค์ ํฉ(์ต๋๊ฐ)์ ์ถ๋ ฅํ๋ค.
ํ์ด
// ํ์ด : https://whkakrkr.tistory.com
#include <bits/stdc++.h>
using namespace std;
const int INF = 4000001;
int main() {
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
// input
int n,k, g,x;
cin >> n >> k;
vector<int>v(INF, 0);
for(int i=0; i<n; i++) {
cin >> g >> x;
v[x] = g;
}
// solution
long long cur=0, ans=0;
int left=0, right=0;
for(; right<=2*k; right++) {
cur += v[right];
}
while(right<INF) {
ans = max(cur, ans);
cur -= v[left];
cur += v[right];
left++;
right++;
}
cout << ans;
return 0;
}
2025.04.22
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
const int SIZE = 1000000;
int maxIce(int k, int end_point, vector<int>&position) {
int section = 2*k + 1;
int section_ice = 0;
for(int i=0; i<section; i++){
if(i > end_point)
break;
section_ice += position[i];
}
int ans = section_ice;
for(int i=section; i<=end_point; i++) {
section_ice -= position[i-section];
section_ice += position[i];
ans = max(ans, section_ice);
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n, k;
cin >> n >> k;
vector<int> position(SIZE+1, 0);
int g, x, end_point=0;
while(n--) {
cin >> g >> x;
position[x] = g;
end_point = max(end_point, x);
}
cout << maxIce(k, end_point, position);
return 0;
}
/*
*/
2021.08.08 ?
'๐๏ธ PS (BOJ) > Two Pointer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 2003๋ฒ: ์๋ค์ ํฉ 2 (0) | 2023.07.27 |
---|---|
[BOJ S1][C++] ๋ฐฑ์ค 2531๋ฒ: ํ์ ์ด๋ฐฅ (0) | 2022.10.20 |
๋ฐฑ์ค 1644๋ฒ: ์์์ ์ฐ์ํฉ (0) | 2022.10.18 |
๋ฐฑ์ค 2470๋ฒ: ๋ ์ฉ์ก (0) | 2022.10.18 |
๋ฐฑ์ค 21921๋ฒ: ๋ธ๋ก๊ทธ (0) | 2022.10.18 |