From b00de90e037f44025be9d4e6e8721bad1a323f7d Mon Sep 17 00:00:00 2001 From: Yash Khandelwal <72225347+yashkhandelwal123@users.noreply.github.com> Date: Wed, 26 Oct 2022 16:39:09 +0530 Subject: [PATCH] Aggressive Cow updated this for hacktoberfest2022. --- aggressive_cow.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 aggressive_cow.cpp diff --git a/aggressive_cow.cpp b/aggressive_cow.cpp new file mode 100644 index 0000000..85e09bb --- /dev/null +++ b/aggressive_cow.cpp @@ -0,0 +1,102 @@ +#include +using namespace std; +#define ff(i, s, n) for (int i = s; i < n; i++) +#define fb(i, s, n) for (int i = n; i >= s; i--) +bool check(int c,long long a[],int n,long long mid){ + int count = 1; + long long curr_pos = a[0]; + ff(i,1,n){ + if(a[i]-curr_pos >= mid){ + curr_pos = a[i]; + count++; + } + if(count == c){ + return true; + } + } + return false; +} +int main(){ + // #ifndef ONLINE_JUDGE + // freopen("input.txt", "r", stdin); + // freopen("output.txt", "w", stdout); + // #endif + int t; + cin>>t; + while(t--){ + int n,c; + cin>>n>>c; + long long a[n]; + ff(i,0,n){ + cin>>a[i]; + } + sort(a,a+n); + long long start = 0; + long long end = a[n-1]-a[0]; + int ans = -1; + while(start<=end){ + long long mid = start + (end-start)/2; + if(check(c,a,n,mid)){ + ans = mid; + start = mid+1; + } + else{ + end = mid-1; + } + } + cout< +// using namespace std; +// +// bool check(int cows,long long positions[],int n,long long distance){ +// +// int count = 1; +// long long last_position = positions[0]; +// +// for(int i=1;i= distance){ +// last_position = positions[i]; +// count++; +// } +// +// if(count == cows){ +// return true; +// } +// } +// return false; +// } +// +// int main(){ +// int t; +// cin >> t; +// while(t--){ +// int n,c; +// cin >> n >> c; +// +// long long positions[n]; +// for(int i=0;i> positions[i]; +// } +// sort(positions,positions+n); +// long long start = 0; +// long long end = positions[n-1] - positions[0]; +// +// long long ans = -1; +// +// while(start<=end){ +// long long mid = start + (end-start)/2; +// +// if(check(c,positions,n,mid)){ +// ans = mid; +// start = mid+1; +// }else{ +// end = mid-1; +// } +// +// } +// cout << ans <