Codeforces 650B Image Preview(尺取法)
题目大概说手机有n张照片。通过左滑或者右滑循环切换照片,滑动需要花费a时间;看一张照片要1时间,而看过的可以马上跳过不用花时间,没看过的不能跳过;有些照片要横着看,要花b时间旋转方向。那么问T时间下最多可以看多少张相片。
先确定左滑最多能看到哪张,然后用另一个指针从第一张照片往右移动,这代表先右滑然后左滑的方式看照片,而每次向右的指针移动计算其时间,不合法的话就通过向左的指针向右移修正时间;
而先左滑然后右滑的方式同理。
模拟题,好难写。。不过写好后提交居然就1A了。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char str[];
bool vis[];
int main(){
int n,a,b,T;
scanf("%d%d%d%d",&n,&a,&b,&T);
scanf("%s",str); int i=,j=,ans=;
int t=T,cnt=;
while(j<n){
if(str[j]=='w') t-=b;
--t;
if(t<) break;
++cnt;
t-=a;
++j;
}
if(cnt==){
putchar('');
return ;
}
ans=max(ans,cnt);
t=T;
for(int k=; k<cnt; ++k){
if(str[k]=='w') t-=b;
--t;
if(k!=cnt-) t-=a;
vis[k]=;
}
j=cnt-;
while(true){
if(--i==-) i=n-;
if(vis[i]) break;
t-=a;
if(str[i]=='w') t-=b;
--t;
t-=a;
while(t< && j> && vis[j]){
t+=a;
if(str[j]=='w') t+=b;
++t;
--cnt;
vis[j]=;
--j;
}
if(t<) break;
++cnt;
ans=max(ans,cnt);
} memset(vis,,sizeof(vis));
i=; j=;
t=T; cnt=;
while(cnt<n){
if(str[i]=='w') t-=b;
--t;
if(t<) break;
++cnt;
t-=a;
if(--i==-) i=n-;
} ans=max(ans,cnt);
t=T;
for(int k=,tmp=; k<cnt; ++k){
if(str[tmp]=='w') t-=b;
--t;
if(k!=cnt-) t-=a;
vis[tmp]=;
if(--tmp==-) tmp=n-;
}
if(++i==n) i=;
while(true){
if(++j==n) j=;
if(vis[j]) break;
t-=a;
if(str[j]=='w') t-=b;
--t;
t-=a;
while(t< && i && vis[i]){
t+=a;
if(str[i]=='w') t+=b;
++t;
--cnt;
vis[i]=;
if(++i==n) i=;
}
if(t<) break;
++cnt;
ans=max(ans,cnt);
} printf("%d",ans);
return ;
}
Codeforces 650B Image Preview(尺取法)的更多相关文章
- Codeforces 958F2 Lightsabers (medium) 尺取法
题目大意: 输入n,m,分别表示人的个数和颜色的个数,下一行输入n个数,对应每个人的颜色,最后一行输入对应每个颜色的人应有的数量: 问是否能找出一个区间,满足条件但有多余的人,输出多余的人最少的个数, ...
- codeforces 650B . Image Preview 二分
题目链接 B. Image Preview time limit per test 1 second memory limit per test 256 megabytes input standar ...
- Codeforces 650B Image Preview
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- Codeforces Educational Codeforces Round 5 D. Longest k-Good Segment 尺取法
D. Longest k-Good Segment 题目连接: http://www.codeforces.com/contest/616/problem/D Description The arra ...
- Codeforces Round #364 (Div.2) C:They Are Everywhere(双指针/尺取法)
题目链接: http://codeforces.com/contest/701/problem/C 题意: 给出一个长度为n的字符串,要我们找出最小的子字符串包含所有的不同字符. 分析: 1.尺取法, ...
- Codeforces Round #354 (Div. 2)_Vasya and String(尺取法)
题目连接:http://codeforces.com/contest/676/problem/C 题意:一串字符串,最多改变k次,求最大的相同子串 题解:很明显直接尺取法 #include<cs ...
- codeforces 814 C. An impassioned circulation of affection 【尺取法 or DP】
//yy:因为这题多组数据,DP预处理存储状态比每次尺取快多了,但是我更喜欢这个尺取的思想. 题目链接:codeforces 814 C. An impassioned circulation of ...
- Codeforces 676C Vasya and String(尺取法)
题目大概说给一个由a和b组成的字符串,最多能改变其中的k个字符,问通过改变能得到的最长连续且相同的字符串是多长. 用尺取法,改变成a和改变成b分别做一次:双指针i和j,j不停++,然后如果遇到需要改变 ...
- CodeForces 701C They Are Everywhere 尺取法
简单的尺取法…… 先找到右边界 然后在已经有了所有字母后减小左边界…… 不断优化最短区间就好了~ #include<stdio.h> #include<string.h> #d ...
随机推荐
- !带有指针的类和struct赋值的本质 - host to device
//这个变量必须在while循环外面 //原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后 //里面的数值拷贝过去了,而里头的指针只给了地址 //所以如果这个 ...
- 赛车比赛(洛谷U4566)
题目背景 kkk在赛车~ 题目描述 现在有N辆赛车行驶在一条直线跑道(你可以认为跑道无限长)上.它们各自以某种速度匀速前进,如果有两辆车A车和B车,A车在B车的后面,且A车的速度大于B车的速度,那么经 ...
- C++异常层次结构图
- (1)第一个ASP.NET Web API
Install-Package Microsoft.AspNet.WebApi . Global.asax protected void Application_Start() { AreaReg ...
- Dubbo集成Spring与Zookeeper实例
>>Dubbo最佳实践 使用Dubbo结合Zookeeper和Spring,是使用比较广泛的一种组合,下面参考官方文档,做个简单的示例,一步步搭建一个使用dubbo结合Zookeeper和 ...
- 【131031】struts 1 中 <html:form>
<DIV>来看看 使用 ActionForm 这个主题,当时使用了一个静态表单网页:<BR>* form.htm<BR><BR><BR>&l ...
- subversion安装使用
这里仅针对subversion进行说明,未完待续. 一.下载subversion并安装: a.subversion 要做svn服务器的必须装 b.Tortoisesvn 仅仅是访问svn服务器的客户端 ...
- Win10 UAP 绑定
Compiled DataBinding in Windows Universal Applications (UAP) http://nicksnettravels.builttoroam.com/ ...
- 解决 CentOS网卡eth0启用不了问题
转自:http://www.centoscn.com/CentosBug/osbug/2014/0423/2850.html [root@localhost Desktop]# service net ...
- 聊聊传统oo和js的某些对比——对象/函数/new关键字等
自己的学习记录,写的短点可以以后短时间内理清一些疑惑,看前要求你至少了解js中关于原型链等基本概念,因为文章直接以总结的形式理出知识点,没有去解释一些基本的概念! 1.1.熟记两句话,预预热 1. 函 ...