zoukankan      html  css  js  c++  java
  • CodeForces 803D Magazine Ad

    二分。

    首先把字符串处理成一个数组,二分答案,判断一下即可。

    #include <cstdio>
    #include <cmath>
    #include <set>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int p;
    int a[1000010],sz;
    char s[1000010];
    
    void work()
    {
        int sum=0;
        for(int i=0;s[i];i++)
        {
            sum++;
            if(s[i]==' ')
            {
                a[sz++] = sum;
                sum=0;
            }
            else if(s[i]=='-')
            {
                a[sz++] = sum;
                sum=0;
            }
        }
        if(sum)
        {
            a[sz++] = sum;
        }
    }
    
    bool check(int x)
    {
        int sum=0;
        int y=0;
    
        for(int i=0;i<sz;i++)
        {
            if(a[i]>x) return 0;
        }
    
        for(int i=0;i<sz;i++)
        {
            if(sum+a[i]<=x)
            {
                sum=sum+a[i];
            }
            else 
            {
                sum = a[i];
                y++;
            }
        }
    
        if(sum) y++;
    
        if(y<=p) return 1;
        return 0;
    }
    
    int main()
    {
        scanf("%d",&p);
        getchar();
        gets(s);
        work();
    
        int ans,L=1,R=1000000;
    
        while(L<=R)
        {
            int mid = (L+R)/2;
            if(check(mid)) ans = mid,R = mid-1;
            else L = mid+1;
        }
    
        printf("%d
    ",ans);
    
        return 0;
    }
    
  • 相关阅读:
    内容敏感图像压缩
    线性筛素数
    一元三次方程
    holiday
    电话网络
    expect之初使用
    python基本数据类型
    Linux系统中的日志管理
    Linux计划任务(at,crontab)
    RHEL7 启动配置 加密
  • 原文地址:https://www.cnblogs.com/zufezzt/p/6837150.html
Copyright © 2011-2022 走看看