https://www.acmicpc.net/problem/2343
λ¬Έμ
κ°ν λ μμ μ κΈ°ν κ°μ λμμμ λΈλ£¨λ μ΄λ‘ λ§λ€μ΄ ν맀νλ €κ³ νλ€. λΈλ£¨λ μ΄μλ μ΄ Nκ°μ κ°μκ° λ€μ΄κ°λλ°, λΈλ£¨λ μ΄λ₯Ό λ Ήνν λ, κ°μμ μμκ° λ°λλ©΄ μ λλ€. μμκ° λ€λ°λλ κ²½μ°μλ κ°μμ νλ¦μ΄ λ겨, νμλ€μ΄ λνΌλμ λΉ μ§ μ μκΈ° λλ¬Έμ΄λ€. μ¦, iλ² κ°μμ jλ² κ°μλ₯Ό κ°μ λΈλ£¨λ μ΄μ λ Ήννλ €λ©΄ iμ j μ¬μ΄μ λͺ¨λ κ°μλ κ°μ λΈλ£¨λ μ΄μ λ Ήνν΄μΌ νλ€.
κ°ν λ μ΄ λΈλ£¨λ μ΄κ° μΌλ§λ νλ¦΄μ§ μμ§ μ μ μκΈ° λλ¬Έμ, λΈλ£¨λ μ΄μ κ°μλ₯Ό κ°κΈμ μ€μ΄λ €κ³ νλ€. μ€λ κ³ λ―Ό λμ κ°ν λ Mκ°μ λΈλ£¨λ μ΄μ λͺ¨λ κΈ°ν κ°μ λμμμ λ ΉννκΈ°λ‘ νλ€. μ΄λ, λΈλ£¨λ μ΄μ ν¬κΈ°(λ Ήν κ°λ₯ν κΈΈμ΄)λ₯Ό μ΅μλ‘ νλ €κ³ νλ€. λ¨, Mκ°μ λΈλ£¨λ μ΄λ λͺ¨λ κ°μ ν¬κΈ°μ΄μ΄μΌ νλ€.
κ°ν μ κ° κ°μμ κΈΈμ΄κ° λΆ λ¨μ(μμ°μ)λ‘ μ£Όμ΄μ§λ€. μ΄λ, κ°λ₯ν λΈλ£¨λ μ΄μ ν¬κΈ° μ€ μ΅μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ κ°μμ μ N (1 ≤ N ≤ 100,000)κ³Ό M (1 ≤ M ≤ N)μ΄ μ£Όμ΄μ§λ€. λ€μ μ€μλ κ°ν μ κΈ°ν κ°μμ κΈΈμ΄κ° κ°μ μμλλ‘ λΆ λ¨μλ‘(μμ°μ)λ‘ μ£Όμ΄μ§λ€. κ° κ°μμ κΈΈμ΄λ 10,000λΆμ λμ§ μλλ€.
μΆλ ₯
첫째 μ€μ κ°λ₯ν λΈλ£¨λ μ΄ ν¬κΈ°μ€ μ΅μλ₯Ό μΆλ ₯νλ€.
μ€λ²1.
μ΄μ§νμμ λ μ΄λ ΅λ€
νμ λ μ΅μκ°, μ€κ°κ°, μ΅λκ°μΌλ‘ μ‘μμΌνλμ§ ν·κ°λ¦Ό
+ 3/29 μ΄ν΄μλ£
μ΄μ ―λ°€μ μλ©΄μ μκ°ν΄λ΄€λλ° μ΄ν΄ν΄λ²λ Έμ
1 | 2 | 3 | 4 | 5 | 6 | 7 | ... | 27 | 28 |
μ νλ₯Ό λ΄λ°
λ§μ½μ νμΌμ΄ 7κ°μ΄κ³ νμΌ ν¬κΈ°λ₯Ό 1λΆν° 7κΉμ§ μ λ ₯λ°κ² λλ©΄,
λΈλ£¨λ μ΄ νλμ μ΅μ μ©λμ 7μ΄μ΄μΌν¨. μλλ©΄ ν νμΌμ μͺΌκ°μ λ΄μ μ μκ±°λ
κ·Έλ¦¬κ³ λΈλ£¨λ μ΄ νλμ μ΅λ μ©λμ 28μ΄κ² μ§. μλλ©΄ 7κ° νμΌμ λ€ ν©μ³μ νλ²μ λ£μ μ μλ μ΅μκ°μ΄λκΉ.
(1+2+3+4+5+6+7 = 28)
κ·Έλ¦¬κ³ μ°λ¦¬κ° ꡬν΄μΌ ν κ°λ λΈλ£¨λ μ΄μ μ©λμ. κ·ΈλκΉ μ 리νμλ©΄
1. (μ΄μ§νμ)μ΅μκ°, μ€κ°κ°, μ΅λκ°μΌλ‘ λΈλ£¨λ μ΄ μ©λμ μ°Ύλ κ±°λ€! λΌλκ±Έ μ μ μκ³
2. μ λ ₯λ°μ μμλ₯Ό μ§μΌμΌνλκΉ sortλ νλ©΄ μλꡬ
3. λΈλ£¨λ μ΄ μ©λ(mid) * λΈλ£¨λ μ΄ κ°μ(cnt) >= μ΄ νμΌλ€μ μ©λ ν©
4. μ μμ μ΄μ©ν΄μ cntμ m(μ λ ₯λ°μ λΈλ£¨λ μ΄ κ°μ)μ λΉκ΅νλ©΄ λ¨.
5. κ·Έλ¦¬κ³ m==cntμμ λ°λ³΅λ¬Έμ λ©μΆλ©΄ μλ¨ : μλλ©΄ μ°λ¦¬λ λΈλ£¨λ μ΄ νλλΉ "μ΅μ" κΈΈμ΄λ₯Ό ꡬν κ±°λΌμ! λκΉμ§ νμν΄μΌνλ€
λμ νμ΄
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
int m;
int blue[100001]={0};
int minlen = 0;
int maxlen = 0;
int mid = 0;
int result;
cin >> n >> m;
for (int i = 0; i < n; ++i){
cin >> blue[i];
maxlen += blue[i]; // μ΅λ κΈΈμ΄λ λͺ¨λ λ°°μ΄μ ν©
if(minlen < blue[i]) minlen = blue[i]; // μ΅μ κΈΈμ΄λ κ°λ€μ μ΅λκ°
}
while(minlen <= maxlen){
mid = (minlen + maxlen) / 2;
int sum = 0;
int cnt = 0;
for (int i = 0; i < n; ++i){
if(sum + blue[i] > mid){ // midλ λΈλ£¨λ μ΄ νλμ μ©λ
sum = 0;
cnt++;
}
sum += blue[i];
}
cnt++;
if(cnt > m) {
minlen = mid + 1;
}
else if(cnt <= m) {
maxlen = mid-1;
result = mid;
}
// cout << minlen <<" "<<mid<<" "<<maxlen<<"\n";
}
cout << result;
}
μΌμ μ΄λΆνμ νλ¬Έμ λ§ λ νκ³ λ€μ΄λ² μμμ μ°λ¬ κ°μΌμ§..
'π μκ³ λ¦¬μ¦ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++/BOJ] 21318 : νΌμλ Έ 체쑰 (λμ ν©) (0) | 2023.04.02 |
---|---|
[C++/BOJ] 17179 : μΌμ΄ν¬ μλ₯΄κΈ° (μ΄μ§νμ) (0) | 2023.03.29 |
[C++/BOJ] 5549 : νμ± νμ¬ (λμ ν©) / μ½μ§ κΈ°λ‘ (0) | 2023.03.28 |
[C++/BOJ] 13423 : Three Dots (μ΄μ§νμ) / μ½μ§ κΈ°λ‘ (0) | 2023.03.27 |
[C++/BOJ] 17609 : νλ¬Έ (ν¬ν¬μΈν°) / ν μ€νΈμΌμ΄μ€ / μ½μ§ κΈ°λ‘ (0) | 2023.03.25 |