zoukankan      html  css  js  c++  java
  • Codeforces 278B Books

    好久没有写二分了

    题意:有n本书 每本书有一个阅读时间ai 要在t时间内读最多的书 读书的顺序是连续的,如果无法读完一本书就不能开始

    最开始觉得会是个dp,但是动规方程写不出来。想想会不会是二分呢,也写不出来
    看了题解发现,输入的时候要做一个巧妙的处理
    因为书是连续读的,如果ai存的是第1 到第i本书所用的时间总和的话, 那读【i,j】本书的时间就是ai-aj,这样就不需要循环算了啊!
    于是固定一个起点 二分找终点

    太久没写二分的结果就是 居然连二分的条件都不会了。

    #include<stdio.h>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<stack>
    #define inf 1000000000
    using namespace std;
    
    int n, t;
    int a[100005];
    //int dp[100005];
    
    int main()
    {
        while(scanf("%d%d",&n,&t) != EOF){
            a[0] = 0;
            for(int i = 1; i <= n; i++){
                scanf("%d",&a[i]);
                a[i] += a[i - 1];
            }
            //memset(dp,0,sizeof(dp));
    
            int cnt = 0;
            for(int i = 0; i < n; i++){
    
                int left = i + 1;
                int right = n;
                int mid = (left + right) / 2;
                while(left <= right){
    
                    if(a[mid] - a[i] > t){
                        right = mid - 1;
                    }
                    else{
                        left = mid + 1;
                    }
    
                    mid = (left + right) / 2;
                }
    
                cnt = max(cnt, left - i);
            }
    
            printf("%d
    ",cnt - 1);
        }
        return 0;
    }
    这个区间左右都是闭的,a0 是用来辅助的所以最后答案是cnt - 1

  • 相关阅读:
    Maven打jar包
    windows关闭占用某端口的进程
    windows系统下发布python模块到pypi
    【转】vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)
    【转】Java并发编程:volatile关键字解析
    自定义JSP标签
    不一样的ssm
    eclipse制作exe文件
    ftp服务器搭建及简单操作
    OC中的socket通信
  • 原文地址:https://www.cnblogs.com/wyboooo/p/9643461.html
Copyright © 2011-2022 走看看