Codeforces 650B Image Preview(尺取法)
2016-07-16 08:40
260 查看
题目大概说手机有n张照片。通过左滑或者右滑循环切换照片,滑动需要花费a时间;看一张照片要1时间,而看过的可以马上跳过不用花时间,没看过的不能跳过;有些照片要横着看,要花b时间旋转方向。那么问T时间下最多可以看多少张相片。
先确定左滑最多能看到哪张,然后用另一个指针从第一张照片往右移动,这代表先右滑然后左滑的方式看照片,而每次向右的指针移动计算其时间,不合法的话就通过向左的指针向右移修正时间;
而先左滑然后右滑的方式同理。
模拟题,好难写。。不过写好后提交居然就1A了。。
先确定左滑最多能看到哪张,然后用另一个指针从第一张照片往右移动,这代表先右滑然后左滑的方式看照片,而每次向右的指针移动计算其时间,不合法的话就通过向左的指针向右移修正时间;
而先左滑然后右滑的方式同理。
模拟题,好难写。。不过写好后提交居然就1A了。。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char str[1111111]; bool vis[1111111]; int main(){ int n,a,b,T; scanf("%d%d%d%d",&n,&a,&b,&T); scanf("%s",str); int i=0,j=0,ans=0; int t=T,cnt=0; while(j<n){ if(str[j]=='w') t-=b; --t; if(t<0) break; ++cnt; t-=a; ++j; } if(cnt==0){ putchar('0'); return 0; } ans=max(ans,cnt); t=T; for(int k=0; k<cnt; ++k){ if(str[k]=='w') t-=b; --t; if(k!=cnt-1) t-=a; vis[k]=1; } j=cnt-1; while(true){ if(--i==-1) i=n-1; if(vis[i]) break; t-=a; if(str[i]=='w') t-=b; --t; t-=a; while(t<0 && j>0 && vis[j]){ t+=a; if(str[j]=='w') t+=b; ++t; --cnt; vis[j]=0; --j; } if(t<0) break; ++cnt; ans=max(ans,cnt); } memset(vis,0,sizeof(vis)); i=0; j=0; t=T; cnt=0; while(cnt<n){ if(str[i]=='w') t-=b; --t; if(t<0) break; ++cnt; t-=a; if(--i==-1) i=n-1; } ans=max(ans,cnt); t=T; for(int k=0,tmp=0; k<cnt; ++k){ if(str[tmp]=='w') t-=b; --t; if(k!=cnt-1) t-=a; vis[tmp]=1; if(--tmp==-1) tmp=n-1; } if(++i==n) i=0; while(true){ if(++j==n) j=0; if(vis[j]) break; t-=a; if(str[j]=='w') t-=b; --t; t-=a; while(t<0 && i && vis[i]){ t+=a; if(str[i]=='w') t+=b; ++t; --cnt; vis[i]=0; if(++i==n) i=0; } if(t<0) break; ++cnt; ans=max(ans,cnt); } printf("%d",ans); return 0; }
相关文章推荐
- PHP将字符串首字母大小写转换
- hibernate联合主键生成策略以及一对多配置
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
- 设置MySQL数据库名不区分大小写
- 关于增强现实(AR技术)的开源库推荐
- RTMP 封包详解
- 栈和队列
- PHP线程安全和非线程安全的区别
- 最小生成树Jungle Roads
- PHP学习笔记-Cookie
- 显示 、 列表 、 定位
- 数据结构之-栈(Java实现)
- 3分钟,9个Q&A让你快速知道Docker到底是什么
- 微信公众平台开发 获取用户基本信息
- 【重装系统】老毛桃U盘工具V2013超级装机版-安装原版Win7/Win8
- centos下安装redis
- 62. Unique Paths
- Nginx 编译参数详解/大全
- 使用phpMyAdmin修改MySQL数据库root用户密码
- NYOJ 448 寻找最大数