题目:http://codeforces.com/problemset/problem/650/B
题意:
:给n张图片循环可看,每张图片的朝向为横(w)|竖(v),但是手机是竖直放置的。开始时打开的是第0张图片,如果一张图片为w放置就需先花b秒边把该张图片变成v朝向,从一张图片到下一张图片手机的反应时间为a秒,每观察一张图片需要1秒钟。不能直接跳过没看的图片,但是重新刷到看过的图片时,所花的时间只是手机的反应时间,不复看;问在t秒内能看的最多图片的数目为多少?
分析:
考虑一下什么时候会出现最优解,一定是往左翻x个,再往右翻y个,不会出现来回翻的情况,所以可以二分答案,算出往先左耗时和返回再往右耗时与先往右再往左耗时最小值是否在T限制内。这样的方法是比较简单的。看到还有人是暴力枚举左边可以看几个,然后二分右边,与暴力枚举右边再二分左边去找最大值,这样也是可行的。在实现方式上,看到有的人扩展了数组,可以很方便的枚举,可以学习一下:http://www.cnblogs.com/hxer/p/5265612.html

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+5;
int n,a,b,t;
ll w[N];
char s[N];
bool check(int m)
{for(int i=1;i<=m;i++){ll sum1=w[i]+(w[n]-w[n-(m-i)]);ll sum2=min((i-1)*a*2+(m-i)*a,(i-1)*a+(m-i)*a*2);if(sum1+sum2<=t)return 1;}return 0;
}
int main()
{scanf("%d%d%d%d%s",&n,&a,&b,&t,s+1);for(int i=1;i<=n;i++)w[i]=w[i-1]+1+(s[i]=='w'?b:0);int l=0,r=n;while(l<r){int m=(l+r+1)>>1;if(check(m))l=m;else r=m-1;}printf("%d\n",l);
}

Codeforces 650B 二分相关推荐

  1. Match Points CodeForces 1156C 二分答案

    CodeForces 1156C Match Points 传送门:https://codeforces.com/problemset/problem/1156/C You are given a s ...

  2. CodeForces - 786C——二分+模拟?

    [题目描述] Rick and Morty want to find MR. PBH and they can't do it alone. So they need of Mr. Meeseeks. ...

  3. codeforces 650B - Image Preview

    题意:给你n个照片,从第一个照片开始看,如果一张照片是'w',那么要花费b时间去反转他,否则不用反转,看一张从来没看过的照片要1时间, 从一张滑动到另一张要a时间.如果一张照片看过,则不用再反转,也不 ...

  4. Frodo and pillows CodeForces - 760B 二分 注意l和r的选择

    以后写l和r的初始值的时候,在不影响合理性的前提下,尽量写大一点 比如下面这个代码,如果r不加以或者l==0就不行 #include <iostream> #include <cst ...

  5. SCAU-春季训练-不应该啊(怎么这么菜。。。)

    2021/3/14 春季训练2(难度div2d) 反思:(赛前,看什么crt,赛时满脑子都是线性方程组,....................................) 最近表现都不太好.. ...

  6. javascript字典中添加数组_Javascript 数组与字典

    Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary). 先举例看看数组的用法. var a = new Array(); a[0] = "Acer&qu ...

  7. 22.10.27补卡 CF-279B

    Problem - 279B - Codeforces 用二分前缀和写的 首先前缀和处理数组, 然后从1开始枚举1以后的前缀和是否满足小于等于m, 每次循环更新ans的值, 最后输出最大的答案 /* ...

  8. codeforces 808 E. Selling Souvenirs (dp+二分+思维)

    题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...

  9. Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分

    C. Vasya and Basketball 题目连接: http://codeforces.com/contest/493/problem/C Description Vasya follows ...

最新文章

  1. C++的沉迷与爱恋——侯捷
  2. LeetCode-数组-54. 螺旋矩阵
  3. Activiti工作流之业务标识和流程的挂起激活
  4. Windows下用命令行查找文件for命令的运用
  5. 用STATSVN统计公司SVN代码修改
  6. 都啥年代了,求你别再说Redis是单线程了!
  7. 如何使用 Mac 在 iPhone 上录制 FaceTime 通话?
  8. Android Studio配置文件修改
  9. Python的网络编程[5] - BOOTP + TFTP + FTP - 实现一个简单的文件传输流程
  10. java大学实用教程(第四版)_Java大学实用教程(第4版)
  11. redis过期策略及定期策略配置
  12. 如何用Latex写一篇小论文
  13. 哪些短信平台能发国际短信?
  14. hive之内表和外表
  15. gulp压缩html
  16. C语言 求100--200之间的素数
  17. 安装Python3.6.3+spyder
  18. 1.3 QT界面美化
  19. android气泡组件,Android 聊天气泡
  20. 如何快速了解一个新的前端项目?

热门文章

  1. c语言软件放c盘还是d盘,一般软件应当安装到C盘还是D盘?
  2. Centos6.5 glibc 升级
  3. cdr圆形渐变填充怎么设置_cdrX7怎么手绘蝴蝶插画?cdr蝴蝶的画法
  4. 美发店管理软件有什么用?
  5. Ubuntu 11.04 (Natty Narwhal)图形安装教程、基本设置、网络设置、软件源、开启Unity、ubuntu文档
  6. win10 python3 install mkdocs
  7. json-c arm移植
  8. 完整版 html代码简洁说明,html简单网页代码模板
  9. Deformable Convolutional Networks论文翻译——中英文对照
  10. Android合成Gif