[ An Ac a Day ^_^ ] CodeForces 525B Pasha and String 技巧

时间:2023-11-23 21:36:20

题意就是一次次翻转字符串 然后输出最终的字符串

暴力一发O(n*m)果然超时了

因为每次翻转的的都是a-1到对称位置

所以一个位置翻转两次等于没有操作

所以只需要记录一下len/2的位置前的操作次数

O(len/2)……

 #include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
char str[];
bool vis[];
int main(){
gets(str);
int len=strlen(str);
int n,a;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&a);
vis[a-]=!vis[a-];
}
int now=;
for(int i=;i<len/;i++){
now^=vis[i];
if(now) swap(str[len-i-],str[i]);
}
puts(str);
return ;
}
/* abcdef
1
2 vwxyz
2
2 2 abcdef
3
1 2 3 */