Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- int maxCanAssign(vector<int>& positions, int minDistance) {
- if (positions.empty()) {
- return 0;
- }
- int result = 1;
- int previousPosition = positions[0];
- for (int positionIterator = 1; positionIterator < positions.size(); ++positionIterator) {
- int currentPosition = positions[positionIterator];
- if (currentPosition - previousPosition >= minDistance) {
- ++result;
- previousPosition = currentPosition;
- }
- }
- return result;
- }
- void solveTest() {
- int stallsNumber, cowsNumber;
- cin >> stallsNumber >> cowsNumber;
- vector<int> stallsPositions(stallsNumber);
- for (int positionIterator = 0; positionIterator < stallsNumber; ++positionIterator) {
- cin >> stallsPositions[positionIterator];
- }
- sort(stallsPositions.begin(), stallsPositions.end());
- int minDistance = 0, maxDistance = 1000000000;
- while (maxDistance - minDistance > 1) {
- int averageDistance = (minDistance + maxDistance) / 2;
- if (maxCanAssign(stallsPositions, averageDistance) >= cowsNumber) {
- minDistance = averageDistance;
- }
- else {
- maxDistance = averageDistance;
- }
- }
- if (maxCanAssign(stallsPositions, maxDistance) >= cowsNumber) {
- cout << maxDistance << endl;
- }
- else {
- cout << minDistance << endl;
- }
- }
- int main()
- {
- int testNumber;
- cin >> testNumber;
- for (int testIterator = 0; testIterator < testNumber; ++testIterator) {
- solveTest();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement