Codeforces936C. Lock Puzzle
给个串,只能用操作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相关推荐
- [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)
文章目录 T1:CF1228E Another Filling the Grid solution code T2:CF936C Lock Puzzle solution code T1:CF1228 ...
- HDU 4708 Rotation Lock Puzzle(模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708 题目大意:给定一个方形矩阵,边长为3-10的奇数.每一圈的数字可以沿着顺时针方向和逆时针方向旋转 ...
- Codeforces Round #467 (Div. 1): C. Lock Puzzle(构造)
题目链接:http://codeforces.com/contest/936/problem/C 题意:给你一个起始字符串和一个目标字符串,你只有一种操作:选择一个数x,将后x个字母翻转,然后提取出来 ...
- 2013_warmup
感觉题目质量很差的一套,可能是不正式的原因. 4706 Children's Day 签到题. 4707 Pet 签到题目,BFS或者DFS; 4708 Rotation Lock Puzzle 分析 ...
- Codeforces Round #467 (Div. 2)
A Olympiad 输出除0以外的数字种数即可. B Vile Grasshoppers 猜想答案离y不会很远.暴力枚举答案, $O(\sqrt n)$验证,如果有因数落在区间$[2,p]$里就不合 ...
- 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)
没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...
- 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 ...
- 【java线程】锁机制:synchronized、Lock、Condition
[Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...
- c# lock (obj) 与 lock (this) 区别
lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对其它类实例无影响. 直接上代码. 主窗体代码如下: delega ...
最新文章
- 2.6内核中被废弃的pci_present()
- 磁场对于电感路径检测的影响
- 阿里代码规范插件 中文使用手册 FOR Eclipse
- Linux shell删除变量
- SAP Cloud for Customer 2102版本如何使用Key User Tool创建扩展字段 - extension field
- 保存模型后无法训练_如何解决推荐系统工程难题——深度学习推荐模型线上serving?...
- 字体外面怎么加边框_字体处理的6种方法,解决ppt种字体不突出的问题
- Inconsistency detected Invalid view holder adapter position
- 非阻塞IO发送http请求
- 如何调试一个无法重现的错误?
- 为什么社会上的Java程序员还没有饱和?
- CHD-5.3.6集群安装
- Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载
- android UI设计图片和文字尺寸px对应dp、sp值换算
- NOIP模拟系列 [BZOJ4668]冷战
- 输入法规则(U模式输入)
- 跑步+健身176天后
- MinIO 文件服务器简单搭建
- 第一讲 Matlab/Simulink入门——简单系统模型的Simulink仿真
- 莫拉克电梯服务器说明书_默纳克操作手册
热门文章
- thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法
- php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换
- 学习笔记~~~~LinkedHashMap
- html css外接修改无效,HTML外部引用CSS文件为什么会不生效
- rust电器元件需要什么材料_云南自考大专报考需要什么材料?
- 数据库:如果MySQl磁盘满了,如何解决!
- Linux中Shell脚本函数库的笔记
- Java线程之多线程与多进程(2)——线程优先级与线程安全
- gsettings命令使用简介
- 你可能需要的网易前端三轮面经