关闭

coderforce 525B. Pasha and String

156人阅读 评论(0) 收藏 举报
分类:
解题说明:此题是一道模拟题,题意是给出一个长度不超过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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:95026次
    • 积分:4756
    • 等级:
    • 排名:第6069名
    • 原创:388篇
    • 转载:2篇
    • 译文:0篇
    • 评论:11条
    最新评论