洛谷二分答案
目前难度:普及+/提高-
详解见二分答案
目录
P1316 丢瓶盖
- 用时: 264ms / 内存: 2968KB
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define L long long
using namespace std;
int n,m;
L a[100001];
L read()
{
char c=getchar();
L t=0;
while(c>'9'||c<'0') c=getchar();
while(!(c>'9'||c<'0'))
t=(t<<3)+(t<<1)+c-'0',c=getchar();
return t;
}
bool ju(int s)
{
int t=1,c=1;
for(int i=2;i<=n;++i)
{
if(a[i]-a[t]>=s) {++c;t=i;}
if(c==m) return 1;
}
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
a[i]=read();
sort(a+1,a+1+n);
L l=0,r=1000000000;
while(l<=r)
{
int mid=l+r>>1;
if(ju(mid))
l=mid+1;
else
r=mid-1;
}
cout<<l-1;
return 0;
}
P1396 营救
- 用时: 12ms / 内存: 2554KB
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,s,e,ro;
int f[40005];
struct $
{
int ne,c,t;
}a[40005];
void road(int x,int y,int c)
{
a[++ro].t=y;
a[ro].c=c;
a[ro].ne=f[x];
f[x]=ro;
}
bool ju(int z)
{
int q[20002]={0};//哈哈哈哈哈
bool v[10001]=