codeforces#314D&567D One-Dimensional Battle Ships (Set)

来源:互联网 发布:小米mix2抢购软件 编辑:程序博客网 时间:2024/05/22 13:19

题目大意:http://codeforces.com/problemset/problem/567/D点击打开链接

有一个n*1的矩形格子,alice可以往里边放k个(1*a)的船,每个船不能交叉和接触比如【1,2】【3,4】不行~~然后bob炮轰格子,问几步可以保证他一定打到船
解题思路:二分+Set,每打一次,更新下去区间,看能放下的船数是否为减少~~

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<set>using namespace std;const int maxn=(int)2*1e5+100;set<int>  p;int n,m,k,a,b,ans;int main(){    while(scanf("%d%d%d",&n,&k,&a)!=EOF)    {        p.clear();        scanf("%d",&m);        int flag=0;        p.insert(0);        p.insert(n+1);        ans=(n+1)/(a+1);//a+1最后的a+1多了一个1,n+1补上        for(int i=1; i<=m; i++)        {            scanf("%d",&b);            if(flag==0)            {            int c=*p.lower_bound(b);            int d=*--p.lower_bound(b);            p.insert(b);            ans-=(c-d)/(a+1);            ans+=((c-b)/(a+1)+(b-d)/(a+1));            if(ans<k)  flag=i;            }        }        if(flag) printf("%d\n",flag);        else printf("-1\n");    }}


0 0