FOJ 2203 单纵大法好

二分答案+验证

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

int N,M,K,A;
int p[200000+10],a[200000+10];

int Num(int B,int A)
{
    return (B+1)/(A+1);
}

int main()
{
    while(~scanf("%d%d%d",&N,&K,&A)){
        scanf("%d",&M);
        memset(p,0,sizeof p);
        for(int i=1;i<=M;i++) scanf("%d",&p[i]);

        memset(a,0,sizeof a);
        a[N+1]=1;

        int min=0,max=M+1;
        int mid=(min+max)/2;
        int pre=0;

        while(1)
        {
            if(mid>=pre)
            {
                for(int i=pre;i<=mid;i++) a[p[i]]=1;
                pre=mid;
                int len=0;
                int tot=0;
                for(int i=1;i<=N+1;i++)
                {
                    if(a[i]==1)
                    {
                        tot=tot+Num(len,A);
                        len=0;
                    }
                    else len++;
                }

                if(tot>=K) min=mid+1;
                else max=mid;

                mid=(min+max)/2;

            }

            else
            {
                for(int i=pre;i>mid;i--) a[p[i]]=0;
                pre=mid;
                int len=0;
                int tot=0;
                for(int i=1;i<=N+1;i++)
                {
                    if(a[i]==1)
                    {
                        tot=tot+Num(len,A);
                        len=0;
                    }
                    else len++;
                }

                if(tot>=K) min=mid+1;
                else max=mid;

                mid=(min+max)/2;
            }
            if(min==max) break;
        }
        if(mid==M+1) printf("-1\n");
        else printf("%d\n",mid);
    }
    return 0;
}
时间: 2025-01-16 10:28:22

FOJ 2203 单纵大法好的相关文章

fzu月赛 2203 单纵大法好 二分

Accept: 8    Submit: 18Time Limit: 5000 mSec    Memory Limit : 65536 KB  Problem Description 人在做,天在看,单纵不怂保平安 众娘皆为轮回来,敢教POI进夜战. 勿怪战列低智商,航母不是一个样? 假摔不虚有损管,大破进击是真相! 老S最近喜欢上某个搜集战舰的游戏,这个游戏中很重要的一个内容是能编排自己的战舰,通过出击完成任务来获取资源或新的战舰.大家都说老S是一个“直男”,所以他喜欢把战舰排成一条直线.目

FZU 2203 单纵大法好 (二分 &amp;&amp; 贪心)

题意 : 老S最近喜欢上某个搜集战舰的游戏,这个游戏中很重要的一个内容是能编排自己的战舰,通过出击完成任务来获取资源或新的战舰.大家都说老S是一个"直男",所以他喜欢把战舰排成一条直线.目前老S正准备完成某个新的任务--"困难级丹麦海峡",可以将地图视为1*N的一列方格(下标为1,2,...,N),老S有K列战舰,每列战舰长度为A.老S可以将自己的战舰布局在地图中的任意位置,但是两列战舰之间至少要有一个空格子,并且显然战舰是不能重叠放置的.老S通过内部人员率先知道了

[FZU2203] 单纵大法好(二分)

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2203 二分答案,即二分m表示第m个不会被击中,那么被击中的炮弹为第m+1个.每次check就行了. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃

python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!

你好 由于你是游客 无法查看本文 请你登录再进 谢谢合作 当你在爬某些网站的时候 需要你登录才可以获取数据 咋整? 莫慌 小帅b把这几招传授给你 让你以后从容应对 那么 接下来就是 学习 python 的正确姿势 登录的常见方法无非是这两种 1.让你输入帐号和密码登录 2.让你输入帐号密码+验证码登录 今天 小帅b先跟你说说第一种 需要验证码的咱们下一篇再讲 第一招 Cookie大法 你平常在上某个不为人知的网站的时候 是不是发现你只要登录一次 就可以一直看到你想要的内容 过了一阵子才需要再次登

Laravel 5系列教程六:表单 Forms

免费视频教程地址https://laravist.com/series/laravel-5-basic 在开始之前,我们把界面先美化一点点先: 首先到https://github.com/JellyBool/blog-css-js得到静态文件,然后分别修改下面三个文件: 1. app.blade.php 2. articles/index.blade.php 3. articles/show.blade.php 下面的视图代码的修改部分,如果你偷懒,你可以使用ctrl+c大法. 在app.bla

再学ajax--第二天 | 基于php+mysql+ajax的表单注册、登录、注销

写在前面 ajax学习到了第二天,这次是用第一天封装的ajax函数,后端使用了php+mysql实现基本的注册,登录,注销. php是我前几个月get到的技能,我已经学习到了面向对象,知道各修饰符的含义,继承,接口,构造函数,实例化对象 mysql是跟php一块学的,学习了基本增删改查. ajax原理其实不难理解,最主要的就是XMLHttpRequest(ActiveXObject("Microsoft.XMLHTTP")):在理解该对象之后,最主要理解的是前后端数据的传递问题,我也是

HTTP验证大法(Basic Auth,Session, JWT, Oauth, Openid)

本文标签:   HTTP Auth OpenID HTTP验证大法 Session REST   服务器 成为一个"认证"老司机 本文翻译自 Auth-Boss . 如果有翻译的不恰当或不对的地方, 欢迎指出. 成为一个认证老司机, 了解网络上不同的身份认证方法. 本文档的目的是记录和编目Web上的身份验证方法. 认证指的是创建一个系统的过程,用户可以通过该系统"登录"在线服务,并授予对受保护资源的访问权限. 以下引用可能更好地总结我想要解释的内容: 客户端认证涉及

Laravel教程 六:表单 Forms

Laravel教程 六:表单 Forms 此文章为原创文章,未经同意,禁止转载. Form laravel 5.2 之后请使用 laravelcollective/html 替换 illuminate/html. 出现问题先看评论. 在开始之前,我们把界面先美化一点点先: 首先到https://github.com/JellyBool/blog-css-js得到静态文件,然后分别修改下面三个文件: 1. app.blade.php 2. articles/index.blade.php 3. a

订单单别多达13种——通过代码阅读业务逻辑与管理哲学

业务员下订单,要思考 如下情况: if ( 单价 >0 ) { if ( 部门 == 内贸 ) { if (产品状态 == 返修) { 下国内返修订单.work(); } else if (产品状态 == 试产) { 下试产订单.work(); } else if (产品状态 == 经济型) { 下经济型订单.work(); } else if (产品状态 == 呆滞品) { 下呆滞品订单.work(); } else if (产品状态 == 代工型) { 下代工型订单.work(); } el