poj 3258River Hopscotch
Posted 罚时自动机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 3258River Hopscotch相关的知识,希望对你有一定的参考价值。
题意:一条长l的河,0和l各有一个石头,中间有n个石头,从中间n个石头中去掉m个石头,求所有剩余石头之间距离的最小的最大值
分析:二分

#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e5+5; int c[maxn]; int lo,n,m; bool judge(int x){ int t=0,last=0; for(int i=0;i<n;i++) if(c[i]-last>=x){ t++; last=c[i]; if(t==n-m) break; } return (t==(n-m))&&(lo-last>=x); } int main(){ while(~scanf("%d%d%d",&lo,&n,&m)){ for(int i=0;i<n;i++) scanf("%d",c+i); sort(c,c+n); int l=0,r=lo; while(r-l>0){ int mid=l+(r-l+1)/2; if(judge(mid)) l=mid; else r=mid-1; } printf("%d\\n",l); } return 0; }
以上是关于poj 3258River Hopscotch的主要内容,如果未能解决你的问题,请参考以下文章