您的位置:首页 > 其它

coderforce 525B. Pasha and String

2015-11-18 17:22 218 查看
解题说明:此题是一道模拟题,题意是给出一个长度不超过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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: