zoukankan      html  css  js  c++  java
  • codeforce650B_技巧

    题目链接:http://codeforces.com/problemset/problem/650/B

    题意:

    一只手机上有n张照片,从第1张看起,记住这些照片(1秒钟)。

    照片有的要水平看,有的要垂直看。

    手机是垂直的,不能动。当前位置只能滑动要他的左边或右边,花费的时间是a。

    目前在ID 1 ,向左滑动到ID n, 不能不看,如果看过,则不记看的时间,但要记滑动的时间。如果不是正确的方向,要花费b的时间调整。

    注意可以折回来看。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 const int N = 1e6 + 10;
     8 char ch[N];
     9 int l[N], r[N];
    10 int main()
    11 {
    12     int n, a, b, k, res = 0, i, j;
    13     scanf("%d%d%d%d%s", &n, &a, &b, &k, ch + 1);
    14     l[1] = (ch[1] == 'w') * b + 1;
    15     for(i = 2; i <= n; i++)//一直向右滑动
    16         l[i] = l[i - 1] + (ch[i] == 'w') * b + a + 1;
    17     for(j = n; j >= 1; j--)//一直向左滑动
    18         r[j] = r[j + 1] + (ch[j] == 'w') * b + a + 1;
    19     j = n + 1;
    20     for(i = n; i >= 1; i--)//一直向左看了i张照片
    21     {
    22         for(; j - 1 > i && l[i] + r[j - 1] + min(n - j + 2, i - 1) * a <= k; j--)//
    23             ;
    24         if(l[i] + r[j] + min(n - j + 1, i - 1) * a <= k)//起点向左看了n - j + 1张照片。i减少时,起点向右看的照片就少了; j这时候也在减少,但起点向右看的照片在增多啊。
    25             res = max(i + n - j + 1, res);//技巧就在 j ,自己领会
    26     }
    27     printf("%d
    ", res);
    28     return 0;
    29 }
  • 相关阅读:
    Android培训准备资料之Android开发环境的搭建
    第二十天
    第十九天
    第十八天
    第十七天
    第十六天
    第十四天
    第十三天
    十二天
    十一天
  • 原文地址:https://www.cnblogs.com/luomi/p/5542797.html
Copyright © 2011-2022 走看看