Codeforces 278B Books
2024-10-12 19:08:33
好久没有写二分了
题意:有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\n",cnt - 1);
}
return 0;
}
这个区间左右都是闭的,a0 是用来辅助的所以最后答案是cnt - 1
最新文章
- MongoDB学习笔记三—增删改文档上
- Oracle笔记1-数据库概念
- linux centos中使用yum安装tomcat
- UITableView优化的方法
- Slip.js – 在触摸屏上实现列表的滑动排序功能
- 动手学习TCP:数据传输
- DVR分布式路由
- 在iphone上安装多个微信 【微信营销必备】
- 深入理解ASP.NET的内部运行机制(转)
- 重新认识Box Model、IFC、BFC和Collapsing margins
- 【多线程】--生产者消费者模式--synchronized版本
- Mac电脑使用Android Studio进行真机调试
- python之路第一篇
- Protobuf 从入门到实战
- Nginx配置文档
- 【工具相关】Web-将网站放在XAMPP上面
- Smashing The Browser:From Vulnerability Discovery To Exploit学习记录
- Spring整合Redis时报错:java.util.NoSuchElementException: Unable to validate object
- 【运维】Java开发人员掌握的Linux命令
- hdu 1385 floyd字典序
热门文章
- C# base和this的用法
- IOS UILineBreakMode的各种情况分析
- Nexus5 破解电信关键步骤
- System.exit(0)会跳过finally块的执行
- Ansible 远程执行命令
- mybais 之parameterType =";list";
- Android开发懒人库 -- ButterKnife (转载)
- (转载)Recyclerview | Intent与Bundle在传值上的区别 | 设置布局背景为白色的三种方法
- 119、 android:hardwareAccelerated=";true";or";false";硬件加速的重要性
- javaWeb项目重命名的问题