CodeForces 803D Magazine Ad 二分

CodeForces 803D

题意:给出数 k 和一个字符串,字符串中包含空格和连号 '-' ,我们可以在空格或连号处断开一行,最多可以有 k 行,问可能的最小宽度。如:

4
garage for sa-le
最多可有 4 行,最小宽度为 7 , 即:(空格用 '.' 表示)
garage.
for.
sa-
le

tags:二分最小宽度即可。 每次 check 尽可能少断开,看行数是否 <= k 。

// 803D
#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define rep(i,a,b) for (int i=a; i<=b; ++i)
#define per(i,b,a) for (int i=b; i>=a; --i)
#define mes(a,b)  memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MP make_pair
#define PB push_back
#define fi  first
#define se  second
typedef long long ll;
const int N = 2000005;

int k, len, p[N], cnt;
char str[N];
bool check(int x)
{
    int pos=0, ans=0;
    for(int i=1; i<=cnt; ++i)
    {
        if(p[i+1]-pos+1 > x)
        {
            if(p[i]-pos+1 > x) return false;
            pos=p[i]+1, ++ans;
        }
    }
    if(ans>k) return false;
    return true;
}
int main()
{
    scanf("%d", &k);
    getchar();
    gets(str);
    len = strlen(str);
    rep(i,0,len-1)
        if(str[i]==' ' || str[i]=='-')
            p[++cnt]=i;
    p[++cnt]=len-1,  p[++cnt]=INF;
    int l=1, r=len, ans, mid;
    while(l<=r)
    {
        mid = l+r>>1;
        if(check(mid)) ans=mid, r=mid-1;
        else l=mid+1;
    }
    printf("%d\n", ans);

    return 0;
}

转载于:https://www.cnblogs.com/sbfhy/p/7638937.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值