题目大概说手机有n张照片。通过左滑或者右滑循环切换照片,滑动需要花费a时间;看一张照片要1时间,而看过的可以马上跳过不用花时间,没看过的不能跳过;有些照片要横着看,要花b时间旋转方向。那么问T时间下最多可以看多少张相片。

先确定左滑最多能看到哪张,然后用另一个指针从第一张照片往右移动,这代表先右滑然后左滑的方式看照片,而每次向右的指针移动计算其时间,不合法的话就通过向左的指针向右移修正时间;

而先左滑然后右滑的方式同理。

模拟题,好难写。。不过写好后提交居然就1A了。。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. char str[];
  6. bool vis[];
  7. int main(){
  8. int n,a,b,T;
  9. scanf("%d%d%d%d",&n,&a,&b,&T);
  10. scanf("%s",str);
  11.  
  12. int i=,j=,ans=;
  13. int t=T,cnt=;
  14. while(j<n){
  15. if(str[j]=='w') t-=b;
  16. --t;
  17. if(t<) break;
  18. ++cnt;
  19. t-=a;
  20. ++j;
  21. }
  22. if(cnt==){
  23. putchar('');
  24. return ;
  25. }
  26. ans=max(ans,cnt);
  27. t=T;
  28. for(int k=; k<cnt; ++k){
  29. if(str[k]=='w') t-=b;
  30. --t;
  31. if(k!=cnt-) t-=a;
  32. vis[k]=;
  33. }
  34. j=cnt-;
  35. while(true){
  36. if(--i==-) i=n-;
  37. if(vis[i]) break;
  38. t-=a;
  39. if(str[i]=='w') t-=b;
  40. --t;
  41. t-=a;
  42. while(t< && j> && vis[j]){
  43. t+=a;
  44. if(str[j]=='w') t+=b;
  45. ++t;
  46. --cnt;
  47. vis[j]=;
  48. --j;
  49. }
  50. if(t<) break;
  51. ++cnt;
  52. ans=max(ans,cnt);
  53. }
  54.  
  55. memset(vis,,sizeof(vis));
  56. i=; j=;
  57. t=T; cnt=;
  58. while(cnt<n){
  59. if(str[i]=='w') t-=b;
  60. --t;
  61. if(t<) break;
  62. ++cnt;
  63. t-=a;
  64. if(--i==-) i=n-;
  65. }
  66.  
  67. ans=max(ans,cnt);
  68. t=T;
  69. for(int k=,tmp=; k<cnt; ++k){
  70. if(str[tmp]=='w') t-=b;
  71. --t;
  72. if(k!=cnt-) t-=a;
  73. vis[tmp]=;
  74. if(--tmp==-) tmp=n-;
  75. }
  76. if(++i==n) i=;
  77. while(true){
  78. if(++j==n) j=;
  79. if(vis[j]) break;
  80. t-=a;
  81. if(str[j]=='w') t-=b;
  82. --t;
  83. t-=a;
  84. while(t< && i && vis[i]){
  85. t+=a;
  86. if(str[i]=='w') t+=b;
  87. ++t;
  88. --cnt;
  89. vis[i]=;
  90. if(++i==n) i=;
  91. }
  92. if(t<) break;
  93. ++cnt;
  94. ans=max(ans,cnt);
  95. }
  96.  
  97. printf("%d",ans);
  98. return ;
  99. }

Codeforces 650B Image Preview(尺取法)的更多相关文章

  1. Codeforces 958F2 Lightsabers (medium) 尺取法

    题目大意: 输入n,m,分别表示人的个数和颜色的个数,下一行输入n个数,对应每个人的颜色,最后一行输入对应每个颜色的人应有的数量: 问是否能找出一个区间,满足条件但有多余的人,输出多余的人最少的个数, ...

  2. codeforces 650B . Image Preview 二分

    题目链接 B. Image Preview time limit per test 1 second memory limit per test 256 megabytes input standar ...

  3. Codeforces 650B Image Preview

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  4. 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 ...

  5. Codeforces Round #364 (Div.2) C:They Are Everywhere(双指针/尺取法)

    题目链接: http://codeforces.com/contest/701/problem/C 题意: 给出一个长度为n的字符串,要我们找出最小的子字符串包含所有的不同字符. 分析: 1.尺取法, ...

  6. Codeforces Round #354 (Div. 2)_Vasya and String(尺取法)

    题目连接:http://codeforces.com/contest/676/problem/C 题意:一串字符串,最多改变k次,求最大的相同子串 题解:很明显直接尺取法 #include<cs ...

  7. codeforces 814 C. An impassioned circulation of affection 【尺取法 or DP】

    //yy:因为这题多组数据,DP预处理存储状态比每次尺取快多了,但是我更喜欢这个尺取的思想. 题目链接:codeforces 814 C. An impassioned circulation of ...

  8. Codeforces 676C Vasya and String(尺取法)

    题目大概说给一个由a和b组成的字符串,最多能改变其中的k个字符,问通过改变能得到的最长连续且相同的字符串是多长. 用尺取法,改变成a和改变成b分别做一次:双指针i和j,j不停++,然后如果遇到需要改变 ...

  9. CodeForces 701C They Are Everywhere 尺取法

    简单的尺取法…… 先找到右边界 然后在已经有了所有字母后减小左边界…… 不断优化最短区间就好了~ #include<stdio.h> #include<string.h> #d ...

随机推荐

  1. [Android Pro] Gradle Tips#1-tasks

    reference to : http://trickyandroid.com/gradle-tip-1-tasks/ http://blog.csdn.net/lzyzsd/article/deta ...

  2. git安装--linux下的安装

    一般linux自带git版本很旧,会有一定问题,可以先卸载系统自带git: yum remove git下载及安装git: wget https://github.com/git/git/archiv ...

  3. pmap

    .[root@localhost security]# pmap -d : -bash Address Kbytes Mode Offset Device Mapping r-x-- : bash b ...

  4. Codeforces Round #371 (Div. 2)(set\unique)

    B. Filya and Homework time limit per test 1 second memory limit per test 256 megabytes input standar ...

  5. poj 1837

    题目链接:http://poj.org/problem?id=1837 题目大意: 有一个天平,左臂右臂各长15,然后给出n,m,n代表有几个挂钩,挂钩给出负数代表在左臂的距离,正数则在右臂m代表有m ...

  6. 三、jQuery--jQuery基础--jQuery基础课程--第12章 jQuery在线聊天室

    在线聊天室案例 一.功能简介: 1.用户需要登录后才能进入聊天室交流 2.已无刷新的方式,动态展示交流后的内容和在线人员的基本信息 3.登录后的用户可以提交文字和表情图标 技术重点:利用ajax的无刷 ...

  7. 二、JavaScript语言--JS实践--倒计时效果

    主要内容:分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计效果. Javascript 日期对象: Date()返回当前的日期和时间 getY ...

  8. 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:

    1.监听服务没有启动 windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务. 2.数据库实例没有启动 windo ...

  9. php 复习

    <?php 一.php基础语法1.输出语句:echo print print_r var_dump() 2.php是弱类型语言强制转换类型: (类型)变量 settype(变量,类型) 3.变量 ...

  10. 数据结构和算法 – 6.构建字典: DictionaryBase 类和 SortedList 类

      6.1.DictionaryBase 类的基础方法和属性 大家可以把字典数据结构看成是一种计算机化的词典.要查找的词就是关键字,而词的定义就是值. DictionaryBase 类是一种用作专有字 ...