最小值最大化
丢瓶盖
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#include<unordered_map>
#define ms(a,b) memset((a),(b),sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int P = 131;
const int N = 1e5 + 10;
const int inf = 2e9;
const ll lnf = 9e18;
int n, m;
int a[N];
bool check( int x ) {
int cnt = 1, res = a[1];
for( int i = 2; i <= n; i++ ) {
if( a[i] - res > x ) {
res = a[i];
cnt++;
}
}
return cnt >= m;
}
int main() {
cin >> n >> m;
for( int i = 1; i <= n; i++ ) {
cin >> a[i];
}
sort( a + 1, a + n + 1 );
int l = 0, r = a[n] - a[1];
while( l < r ) {
int mid = l + r >> 1;
if( check( mid ) ) l = mid + 1;
else r = mid;
}
cout << l << endl;
return 0;
}
跳石头
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#include<unordered_map>
#define ms(a,b) memset((a),(b),sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
const int mod = 1e9 + 7;
const int P = 131;
const int N = 1e5 + 10;
const int inf = 2e9;
const ll lnf = 9e18;
int l, n, m;
int a[N];
bool check( int x ) {
int cnt = 0, last = 0;
for( int i = 1; i <= n; i++ ) {
if( a[i] - last < x ) {
cnt++;
}
else {
last = a[i];
}
}
return cnt <= m;
}
int main() {
cin >> l >> n >> m;
for( int i = 1; i <= n; i++ ) {
cin >> a[i];
}
n = n + 1;
a[n] = l;
int l = 1, r = inf;
while( l < r ) {
int mid = l + r + 1 >> 1;
if( check( mid ) ) l = mid;
else r = mid - 1;
}
cout << l << endl;
return 0;
}
最大值最小化