小马的博客

最穷不过要饭,不死终会出头

coderforce 525B. Pasha and String

解题说明:此题是一道模拟题,题意是给出一个长度不超过2*10^5的字符串,进行m次反转。每次反转第a个到第len-a+1个字符之间这一段。求经过m次反转后的字符串是什么。其中len 为字符串的长度。具体做法是对于第i个字符,只有它之前的字符(包括自己)需要反转时,才会引起第i个字符的位置改变。所以我们只需要判断第i个字符的位置一共变了多少次,如果是奇数次,就让它改变位置;否则位置不变。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=2e5+10;
char s[maxm];
int v[maxm];
int main()
{
    while(scanf("%s",s)!=EOF)
    {
        int n,m;
        memset(v,0,sizeof(v));
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&m);
            m--;
            v[m]++;
        }
        int len=strlen(s);
        int length=len;
        if(len%2==0)
        {
            len/=2;
        }
        else
        {
            len=(len/2)+1;
        }
        int sum=0;
        for(int i=0;i<len;i++)
        {
            sum+=v[i];
            if(sum%2==1)
            {
                swap(s[i],s[length-1-i]);
            }
        }
        printf("%s\n",s);
    }
    return 0;
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zyx520ytt/article/details/49910105
个人分类: CoderForce ACM
上一篇coderforce 545B. Equidistant String
下一篇coderforce 550A. Two Substrings
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭