Submit | All submissions | Best solutions | Back to list |
AGGRCOW - Aggressive cows |
Farmer John has built a new long barn, with N (2 <= N <= 100,000)
stalls. The stalls are located along a straight line at positions
x1 ... xN (0 <= xi <= 1,000,000,000).
His C (2 <= C <= N) cows don't like this barn layout and become
aggressive towards each other once put into a stall. To prevent the
cows from hurting each other, FJ wants to assign the cows to the
stalls, such that the minimum distance between any two of them is
as large as possible. What is the largest minimum distance?
Input
t – the number of test cases, then t test cases follows.
* Line 1: Two space-separated integers: N and C
* Lines 2..N+1: Line i+1 contains an integer stall location, xi
Output
For each test case output one integer: the largest minimum distance.
Example
Input:
1 5 3 1 2 8 4 9
Output:
3
Output details:
FJ can put his 3 cows in the stalls at positions 1, 4 and 8,
resulting in
a minimum distance of 3.
Added by: | Roman Sol |
Date: | 2005-02-16 |
Time limit: | 2s |
Source limit: | 10000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | All |
Resource: | USACO February 2005 Gold Division |
hide comments
|
||||||||||||||
2019-09-29 13:22:29
Finally One Correct in One Go!! |
||||||||||||||
2019-09-28 15:29:56
Last edit: 2019-09-28 15:34:15 |
||||||||||||||
2019-09-12 00:27:11
Really good question about binary search. |
||||||||||||||
2019-09-02 17:08:23
great ques but poorly worded |
||||||||||||||
2019-08-25 12:10:34
My code working on my computer but showing wrong answer in SPOJ #include<bits/stdc++.h> using namespace std; int barn, cow, temp; vector<int> pos; bool place_them(int mid) { int count=1, start=pos[0]; for(int i=0; i<barn; i++) { if(pos[i]-start >= mid) { count++; start = pos[i]; } if(count==cow) return 1; } return 0; } int binary(int lo, int hi) { int mid; while(hi-lo>1) { mid = lo + (hi-lo)/2; if(place_them(mid)) lo = mid; else hi = mid; } return mid; } int main() { int t; cin >> t; while(t--) { cin >> barn >> cow; pos.clear(); for(int i=0; i<barn; i++) { cin >> temp; pos.push_back(temp); } sort(pos.begin(), pos.end()); int lo, hi; lo = 0; hi = pos[barn-1] - pos[0] + 1; temp = binary(lo, hi); cout << temp << endl; } return 0; } Last edit: 2019-08-25 12:11:09 |
||||||||||||||
2019-08-17 10:58:01
great question on binary search!! |
||||||||||||||
2019-07-28 08:20:42
nyc qs on binary search! must do! |
||||||||||||||
2019-07-04 12:48:43
AC in one go.!! |
||||||||||||||
2019-06-30 17:15:45
can someonne highlight my error , it's a wrong answer while the output is 3 #include <iostream> #include<vector> #include<algorithm> using namespace std; int check(int i, vector<int> vec,int c) { int count = 1; int pos = 0; int last = 0; int maxDistance = vec.back() - vec.front(); while (pos < (vec.size())) { if (vec[pos] - vec[last] >= i) { count++; maxDistance = min(maxDistance, vec[pos] - vec[last]); last = pos; } pos++; if (count == c) return maxDistance; } return 0; } int main() { int t; cin >> t; for (int i = 0; i < t; i++) { int pos, c; cin >> pos >> c; vector<int> vec; for (int j = 0; j < pos; j++) { int p; cin >> p; vec.push_back(p); } sort(vec.begin(), vec.end()); int start = vec[0]; int end = vec.back(); int score = 0; while (start < end) { int mid = start + (end - start) / 2; score = check(mid, vec, c); if (score>0) { start = mid + 1; } else { end = mid -1; } } cout << score << endl; } } Last edit: 2019-06-30 17:16:12 |
||||||||||||||
2019-06-25 07:30:56
Those who are not getting it, check the first question solved in this video, from 5:10. : https://youtu.be/TC6snf6KPdE Last edit: 2019-06-25 07:32:01 |