首页 > 其他 > 详细

Codeforces 525B Pasha and String

时间:2015-03-27 21:32:55      阅读:388      评论:0      收藏:0      [点我收藏+]

题意:给你一个字符串str ,从1 开始长度为s,每次给你一个 a[i]  ,然后将  [ a[i] , (s-a[i]+1) ]  翻转,问你经过n次操作以后整个字符串是什么样的。

解题思路:

1)根据负负得正的思路,我们只需要从内到外,看那些区域需要翻转,那些区域不需要就行了。

解题代码:

技术分享
 1 // File Name: b.cpp
 2 // Author: darkdream
 3 // Created Time: 2015年03月27日 星期五 00时33分41秒
 4 
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25 #define maxn 200005
26 using namespace std;
27 char str[maxn];
28 int a[maxn];
29 int cmp(int a, int b)
30 {
31   return a > b; 
32 }
33 int n;
34 void change(int l , int r)
35 {
36     for(int i = l ;i <= r ;i ++)
37     {
38         swap(str[i],str[n-i+1]);
39     }
40 }
41 int main(){
42      scanf("%s",&str[1]);
43      int m ; 
44      n = strlen(&str[1]);
45      scanf("%d",&m);
46      for(int i = 1;i <= m; i ++)
47          scanf("%d",&a[i]);
48      sort(a+1,a+1+m,cmp);
49      int last = n/2; 
50      for(int i = 1; i <= m;i ++)
51      {
52           if((m - i) % 2 == 0) 
53           {
54             change(a[i],last);
55           }
56           last = a[i] - 1; 
57      }
58      puts(&str[1]);
59 return 0;
60 }
View Code

2)splay  ,我们知道,splay翻转序列只需要logn  所以splay也可以解 .(想法来源是来自于湖大glqAC,被这天大的脑洞吓到了)

 

Codeforces 525B Pasha and String

原文:http://www.cnblogs.com/zyue/p/4372782.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!