zoukankan      html  css  js  c++  java
  • codeforces525B

    Pasha and String

     CodeForces - 525B 

    Pasha got a very beautiful string s for his birthday, the string consists of lowercase Latin letters. The letters in the string are numbered from 1 to |s| from left to right, where |s| is the length of the given string.

    Pasha didn't like his present very much so he decided to change it. After his birthday Pasha spent m days performing the following transformations on his string — each day he chose integer ai and reversed a piece of string (a segment) from position ai to position |s| - ai + 1. It is guaranteed that ai ≤ |s|.

    You face the following task: determine what Pasha's string will look like after mdays.

    Input

    The first line of the input contains Pasha's string s of length from 2 to 2·105characters, consisting of lowercase Latin letters.

    The second line contains a single integer m (1 ≤ m ≤ 105) —  the number of days when Pasha changed his string.

    The third line contains m space-separated elements ai (1 ≤ aiai ≤ |s|) — the position from which Pasha started transforming the string on the i-th day.

    Output

    In the first line of the output print what Pasha's string s will look like after mdays.

    Examples

    Input
    abcdef
    1
    2
    Output
    aedcbf
    Input
    vwxyz
    2
    2 2
    Output
    vwxyz
    Input
    abcdef
    3
    1 2 3
    Output
    fbdcea

    sol:题意:给出一个字符串,读入ai,表示翻转区间[ai,n-ai+1]
    Ps:写splay的大佬可以直接去码splay,不用看下面的XJB做法
    易知:每个位置翻转两次就相当于没变,于是处理出每个位置翻转的次数,差分就可以了,然后从1~n/2扫一遍,对于操作次数是奇数的位置与对应的位置交换
    #include <bits/stdc++.h>
    using namespace std;
    typedef int ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    const int N=200005;
    int n,Q;
    char S[N];
    int Sum[N];
    int main()
    {
        int i;
        scanf("%s",S+1); n=strlen(S+1);
        R(Q);
        for(i=1;i<=Q;i++)
        {
            int x=read();
            Sum[x]++;
            Sum[n-x+2]--;
        }
        for(i=1;i<=n;i++)
        {
            Sum[i]+=Sum[i-1];
        }
        for(i=1;i<=(n/2);i++) if(Sum[i]&1)
        {
            swap(S[i],S[n-i+1]);
        }
        for(i=1;i<=n;i++) putchar(S[i]);
        puts("");
        return 0;
    }
    /*
    input
    abcdef
    1
    2
    output
    aedcbf
    
    input
    vwxyz
    2
    2 2
    output
    vwxyz
    
    input
    abcdef
    3
    1 2 3
    output
    fbdcea
    
    input
    keicnqmuqinhsmtudqcilocxkbqgzhbkitmqwttdyoyvcbxincwjryzknubpacsngorexaldfurondbednowemnnlphhboycfavs
    2
    5 12
    output
    keiccyobhhphsmtudqcilocxkbqgzhbkitmqwttdyoyvcbxincwjryzknubpacsngorexaldfurondbednowemnnlniqumqnfavs
    */
    View Code
     
  • 相关阅读:
    让你提升命令行效率的 Bash 快捷键
    关于jquery源码中undefined作为参数的理解
    前端手机抓包流程(window)
    前端开发--环境配置
    Code Review的人理解
    JS 组件化开发 系列(一)
    mac 安装sass时遇到gem 的镜像错误
    SpringBoot 整合mybatis
    项目知识点完善
    学习过程京东注册的静态界面
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10633429.html
Copyright © 2011-2022 走看看