Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int maxCanAssign(vector<int>& positions, int minDistance) {
  8. if (positions.empty()) {
  9. return 0;
  10. }
  11. int result = 1;
  12. int previousPosition = positions[0];
  13. for (int positionIterator = 1; positionIterator < positions.size(); ++positionIterator) {
  14. int currentPosition = positions[positionIterator];
  15. if (currentPosition - previousPosition >= minDistance) {
  16. ++result;
  17. previousPosition = currentPosition;
  18. }
  19. }
  20. return result;
  21. }
  22.  
  23. void solveTest() {
  24. int stallsNumber, cowsNumber;
  25. cin >> stallsNumber >> cowsNumber;
  26. vector<int> stallsPositions(stallsNumber);
  27. for (int positionIterator = 0; positionIterator < stallsNumber; ++positionIterator) {
  28. cin >> stallsPositions[positionIterator];
  29. }
  30. sort(stallsPositions.begin(), stallsPositions.end());
  31. int minDistance = 0, maxDistance = 1000000000;
  32. while (maxDistance - minDistance > 1) {
  33. int averageDistance = (minDistance + maxDistance) / 2;
  34. if (maxCanAssign(stallsPositions, averageDistance) >= cowsNumber) {
  35. minDistance = averageDistance;
  36. }
  37. else {
  38. maxDistance = averageDistance;
  39. }
  40. }
  41. if (maxCanAssign(stallsPositions, maxDistance) >= cowsNumber) {
  42. cout << maxDistance << endl;
  43. }
  44. else {
  45. cout << minDistance << endl;
  46. }
  47. }
  48.  
  49. int main()
  50. {
  51. int testNumber;
  52. cin >> testNumber;
  53. for (int testIterator = 0; testIterator < testNumber; ++testIterator) {
  54. solveTest();
  55. }
  56. return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement