给个串,只能用操作shift x表示把后面x个字符翻转后放到串的前面。问s串怎么操作能变t串。n<=2000,操作次数<=6100。

打VP时这转来转去的有点晕。。。

可以想一种逐步构造的方法,即从一个小的完成构造的部分通过一顿操作,在不影响这部分的前提下扩展。

好吧我看题解了,直接丢图,是从abc扩展成xabcy的方法,如果反了就把他最后再倒过来。

操作次数是$\frac{5}{2}n$的,复杂度$kn$,$k$指操作次数。

 1 //#include<iostream>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cstdio>
 5 //#include<map>
 6 #include<math.h>
 7 //#include<time.h>
 8 //#include<complex>
 9 #include<algorithm>
10 using namespace std;
11
12 int n;
13 #define maxn 10011
14 char s[maxn],t[maxn];int cnts[30],cntt[30],ans[maxn],lans=0;
15
16 char tmp[maxn];
17 void shift(int x)
18 {
19     if (x==0) {lans--; return;}
20     memcpy(tmp,s,sizeof(char)*(n+3));
21     int cnt=0; x=n-x+1;
22     for (int i=n;i>=x;i--) s[++cnt]=tmp[i];
23     for (int i=1;i<x;i++) s[++cnt]=tmp[i];
24 }
25
26 int findpos(int p,int rr)
27 {
28     for (int i=rr;i;i--)
29         if (s[i]==t[p]) return i;
30     return maxn*2;
31 }
32
33 int main()
34 {
35     scanf("%d",&n);
36     scanf("%s",s+1); scanf("%s",t+1);
37     for (int i=1;i<=n;i++) cnts[s[i]-'a']++,cntt[t[i]-'a']++;
38     for (int i=0;i<26;i++) if (cnts[i]!=cntt[i]) {puts("-1"); return 0;}
39
40     int p1=(1+n)>>1,p2=p1;
41     int p=findpos(p1,n); p1--; p2++;
42     if (p!=n) {ans[++lans]=n-p; shift(n-p);}
43     bool rev=0;
44     for (int now=1,p;p1;p1--,p2++,now+=2,rev^=1)
45     {
46         if (rev==0) p=findpos(p1,n-now); else p=findpos(p2,n-now);
47         shift(ans[++lans]=n-p);
48         shift(ans[++lans]=n);
49         shift(ans[++lans]=now);
50         if (rev==0) p=findpos(p2,n); else p=findpos(p1,n);
51         shift(ans[++lans]=n-p+1);
52         shift(ans[++lans]=p-now-2);
53     }
54     if (n&1) {if (rev) shift(ans[++lans]=n);}
55     else
56     {
57         if (rev) shift(ans[++lans]=n-1);
58         else
59         {
60             shift(ans[++lans]=n-1);
61             shift(ans[++lans]=1);
62             shift(ans[++lans]=n);
63         }
64     }
65
66     printf("%d\n",lans);
67     for (int i=1;i<=lans;i++) printf("%d ",ans[i]);
68     return 0;
69 }

View Code

还有一种好理解的逐个字符构造,也是从后往前。

比如说现在串是AzB,A的前缀已经是t的一个后缀,z是想加在A前面的字符,B是剩下的。然后这样:AzB->B'zA'->AB'z->zAB'。搞定。操作次数3*n。

(好吧这是评论写的)

转载于:https://www.cnblogs.com/Blue233333/p/8477002.html

Codeforces936C. Lock Puzzle相关推荐

  1. [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)

    文章目录 T1:CF1228E Another Filling the Grid solution code T2:CF936C Lock Puzzle solution code T1:CF1228 ...

  2. HDU 4708 Rotation Lock Puzzle(模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708 题目大意:给定一个方形矩阵,边长为3-10的奇数.每一圈的数字可以沿着顺时针方向和逆时针方向旋转 ...

  3. Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)

    题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...

  4. 2013_warmup

    感觉题目质量很差的一套,可能是不正式的原因. 4706 Children's Day 签到题. 4707 Pet 签到题目,BFS或者DFS; 4708 Rotation Lock Puzzle 分析 ...

  5. Codeforces Round #467 (Div. 2)

    A Olympiad 输出除0以外的数字种数即可. B Vile Grasshoppers 猜想答案离y不会很远.暴力枚举答案, $O(\sqrt n)$验证,如果有因数落在区间$[2,p]$里就不合 ...

  6. 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)

    没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...

  7. Solve Slide Puzzle with Hill Climbing Search Algorithm

    Hill climbing search algorithm is one of the simplest algorithm which falls under local search and o ...

  8. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  9. c# lock (obj) 与 lock (this) 区别

    lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对其它类实例无影响. 直接上代码. 主窗体代码如下: delega ...

最新文章

  1. 2.6内核中被废弃的pci_present()
  2. 磁场对于电感路径检测的影响
  3. 阿里代码规范插件 中文使用手册 FOR Eclipse
  4. Linux shell删除变量
  5. SAP Cloud for Customer 2102版本如何使用Key User Tool创建扩展字段 - extension field
  6. 保存模型后无法训练_如何解决推荐系统工程难题——深度学习推荐模型线上serving?...
  7. 字体外面怎么加边框_字体处理的6种方法,解决ppt种字体不突出的问题
  8. Inconsistency detected Invalid view holder adapter position
  9. 非阻塞IO发送http请求
  10. 如何调试一个无法重现的错误?
  11. 为什么社会上的Java程序员还没有饱和?
  12. CHD-5.3.6集群安装
  13. Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载
  14. android UI设计图片和文字尺寸px对应dp、sp值换算
  15. NOIP模拟系列 [BZOJ4668]冷战
  16. 输入法规则(U模式输入)
  17. 跑步+健身176天后
  18. MinIO 文件服务器简单搭建
  19. 第一讲 Matlab/Simulink入门——简单系统模型的Simulink仿真
  20. 莫拉克电梯服务器说明书_默纳克操作手册

热门文章

  1. thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法
  2. php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换
  3. 学习笔记~~~~LinkedHashMap
  4. html css外接修改无效,HTML外部引用CSS文件为什么会不生效
  5. rust电器元件需要什么材料_云南自考大专报考需要什么材料?
  6. 数据库:如果MySQl磁盘满了,如何解决!
  7. Linux中Shell脚本函数库的笔记
  8. Java线程之多线程与多进程(2)——线程优先级与线程安全
  9. gsettings命令使用简介
  10. 你可能需要的网易前端三轮面经