Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <vector>
- #include <algorithm>
- using namespace std;
- int n, c;
- long long tmp;
- long long ans=0;
- vector<long long> v;
- void go(long long start, long long finish) {
- if (start > finish) return;
- long long distance = start - ((start - finish) / 2);
- long long cntt = 1;
- long long before = v[0];
- for (int i = 1; i < v.size(); i++) {
- if (before + distance <= v[i]) {
- before = v[i];
- cntt++;
- //printf("%d ", v[i]);
- }
- if (cntt > c) {
- break;
- }
- }
- //이분탐색을 공유기 갯수 기준으로 가르기
- if (cntt >= c) {
- if (distance > ans) {
- ans = distance;
- }
- go(distance + 1, finish); //이분탐색을 할 때는 거리를 조절
- }
- else {
- go(start, distance - 1);
- }
- }
- int main() {
- scanf("%d %d", &n, &c);
- for (int i = 0; i < n; i++) {
- scanf("%lld", &tmp);
- v.push_back(tmp);
- }
- sort(v.begin(), v.end());
- //printf("%d\n", v[n - 1] - v[0]);
- go(1,v[n-1]-v[0]);
- printf("%d\n", ans);
- return 0;
- }
Add Comment
Please, Sign In to add comment