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 ...
随机推荐
- cuda编程基础
转自: http://blog.csdn.net/augusdi/article/details/12529247 CUDA编程模型 CUDA编程模型将CPU作为主机,GPU作为协处理器(co-pro ...
- C#中的变量及命名规则
变量: 1.作用 :可以让我们在计算机中存储数据 2.语法:变量类型 变量名=赋值: 3.常用的数据类型: int 整数类型 取值范围:最大2147483647;最小-214748364 ...
- Elo rating system 模拟
package org.cc.foo_008; import java.util.ArrayList; import java.util.List; import java.util.Random; ...
- 两个viewport的故事(第二部分)
原文:http://www.quirksmode.org/mobile/viewports2.html 在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如&l ...
- jQuery - 5.样式操作
样式操作 1.获取样式 attr("class"), 2.设置样式attr("class","myclass"), 3.追加样式addCla ...
- Server.MapPath查询路径那几件事
主要总结Server.MapPath 这个方法的使用以及使用的场景,不是什么时候都适合使用: 1.实现功能: Server.MapPath能够获取指定URL相对服务器的物理路径,在IIS服务端,能够根 ...
- python中多线程与非线程的执行性能对比
此对比说明了一件事: 如果是IO型应用,多线程有优势, 如果是CPU计算型应用,多线程没必要,还有实现锁呢. #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- Instagram的持续部署技术
Instagram最近发表了一篇关于他们的持续部署(CD)管道的文章,持续部署管道可以让他们更快的将代码推送到生产环境,并且轻松地识别糟糕的提交和始终保持发布可用.在一段时间内以迭代的方式放在一起,其 ...
- PHP json_encode中文乱码解决方法
相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题.JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题.JSON和js一样,对于 ...
- C#从Image上读取文本
今天通过C#来实现一个读取Image上文本的功能. 1. 环境准备: 1). 下载 Microsoft Office SharePoint Designer 2007. 2). 安装请参考KB:htt ...