zoukankan      html  css  js  c++  java
  • 2020牛客暑期多校第三场B-Classical String Problem(字符串移动思维)

    题目大意:给你一个字符串,有q次操作,每次三种类型M x,表示将字符串最左边的x个字符移动到字符串最右边,M -x,表示将字符串最右边的x个字符移动到最左边。A x,表示询问当下字符串第x个位置的字符是什么(字符串位置从1开始)

    输入

    nowcoder
    6
    A 1
    M 4
    A 6
    M -3
    M 1
    A 1

    输出

    n
    o
    w

    刚开始的时候确实给我看蒙了。。。我还以为是什么数据结构呢。。。但随着AC人数的增加我发现事情似乎并不简单。。。

    我们设置head指针,当字符串将最左边的x个移动到最右边的时候,我们只需要将head移动到x+1位置即可,将最右边的x各移动到最左边,实际上就是将最左边的n-x个字符移动到最右边,那么我们将head移动到当前head位置再+n-x+1即可,最后询问的时候我们直接将head+x对字符串长度取模即可

    以下是AC代码:

    #include <bits/stdc++.h>
    using namespace std;
     
    int main(int argc, char const *argv[])
    {
        ios::sync_with_stdio(false);
        cin.tie(0);cout.tie(0);
        string s;
        int q;
        cin>>s;
        cin>>q;
        int len=s.length();
        long long head=0,tail=len-1;
        while (q--){
            char op[5];
            int x;
            cin>>op>>x;
            if (op[0]=='A'){
                x--;
                cout<<s[(head+x)%len]<<'
    ';
            }
            else {
                if (x>0) head+=x;
                else head+=len+x;
            }
        }
        return 0;
    }
    路漫漫兮
  • 相关阅读:
    第四章 高级查询(二)
    部分 语法Mysql
    MySQL高级查询
    BZOJ 3124 SDOI2013 直径
    BZOJ 3130 SDOI2013 费用流
    BZOJ 3993 SDOI2015 星际战争
    BZOJ 3997 TJOI2015 组合数学
    BZOJ 4003 JLOI2015 城池攻占
    BZOJ 3925 ZJOI2015 地震后的幻想乡
    codeforces #313 div1 E
  • 原文地址:https://www.cnblogs.com/lonely-wind-/p/13352589.html
Copyright © 2011-2022 走看看