字符串处理 Codeforces Round #297 (Div. 2) B. Pasha and String

 

题目传送门

 1 /*  2  题意:给出m个位置,每次把[p,len-p+1]内的字符子串反转,输出最后的结果  3  字符串处理:朴素的方法超时,想到结果要么是反转要么没有反转,所以记录  4  每个转换的次数,把每次要反转的反转就不超时了:)  5 */  6 #include <cstdio>  7 #include <algorithm>  8 #include <cstring>  9 using namespace std; 10 11 const int MAXN = 2e5 + 10; 12 const int INF = 0x3f3f3f3f; 13 char s[MAXN]; 14 int to[MAXN]; 15 16 int main(void) //Codeforces Round #297 (Div. 2) B. Pasha and String 17 { 18 int m; 19 scanf ("%s", s + 1); 20 int len = strlen (s + 1); 21 scanf ("%d", &m); 22 while (m--) 23  { 24 int p; scanf ("%d", &p); 25 int q = len - p + 1; 26 to[p]++; 27  } 28 29 int sum = 0; 30 for (int i=1; i<=len/2; ++i) 31  { 32 sum += to[i]; 33 if (sum & 1) swap (s[i], s[len-i+1]); 34  } 35 printf ("%s", s + 1); 36 37 return 0; 38 } 39 40 41 42 /* 43 abcdef 44 1 45 2 46 vwxyz 47 2 48 2 2 49 abcdef 50 3 51 1 2 3 52 */

 

你可能感兴趣的:(codeforces)