博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #197 (Div. 2) : E
阅读量:4509 次
发布时间:2019-06-08

本文共 1632 字,大约阅读时间需要 5 分钟。

看了codeforces上的大神写的题解之后,才知道这道题水的根本!

不过相对前面两题来说,这道题的思维要难一点;

不过想到了水的根本,这题也真心不难;

方法嘛,就像剥洋葱一样,从外面往里面剥;

所以呢,dfs,每次往左或者往右找到乱序的那个元素,反转一下;

这样就行了,而且题目说了保证能够在三次内搞定;

证明我也不会,意思应该就是这样了!

1 #include
2 #include
3 #include
4 #define maxn 1009 5 using namespace std; 6 int a[maxn],n; 7 vector
l,r; 8 bool found=0; 9 int checkleft()10 {11 for(int i=1;i<=n;i++)12 if(a[i]!=i) return i;13 return -1;14 }15 int checkright()16 {17 18 for(int i=n;i>0;i--)19 if(a[i]!=i) return i;20 return -1;21 }22 int getpos(int x)23 {24 for(int i=1;i<=n;i++)25 if(a[i]==x) return i;26 }27 void print()28 {29 printf("%d\n",l.size());30 for(int i=l.size()-1;i>=0;i--)31 printf("%d %d\n",l[i],r[i]);32 }33 34 void dfs(int level)35 {36 if(checkleft()==-1)37 {38 print();39 found=1;40 }41 if(found||level==3) return;42 int ll=checkleft();43 int pp=getpos(ll);44 reverse(a+ll,a+pp+1);45 l.push_back(ll);46 r.push_back(pp);47 dfs(level+1);48 if(found) return;49 reverse(a+ll,a+pp+1);50 l.pop_back();51 r.pop_back();52 int rr=checkright();53 pp=getpos(rr);54 reverse(a+pp,a+rr+1);55 l.push_back(pp);56 r.push_back(rr);57 dfs(level+1);58 if(found) return;59 reverse(a+pp,a+rr+1);60 l.pop_back();61 r.pop_back();62 }63 64 int main()65 {66 scanf("%d",&n);67 for(int i=1;i<=n;i++)68 scanf("%d",&a[i]);69 dfs(0);70 return 0;71 }
View Code

 

转载于:https://www.cnblogs.com/yours1103/p/3286003.html

你可能感兴趣的文章
uni-app中onLoad不起作用
查看>>
多线程概述
查看>>
Linux_ubuntu命令-用户、权限管理
查看>>
Knowladge_网站学习_RSS 学习
查看>>
TCP/IP,Web世界的基本规则
查看>>
c++ 子类构造函数初始化及父类构造初始化
查看>>
Analysis on Human Various Emotional Expression
查看>>
DataGridView DataGridViewCheckBoxColumn编辑时实时触发事件
查看>>
SignalR---服务端
查看>>
PlayerPrefs存储Vector3等结构数据
查看>>
LightOJ - 1422 Halloween Costumes (区间DP)
查看>>
Dubbo架构设计详解
查看>>
谁终将点燃闪电,必长久如云漂泊
查看>>
小诗句集萃四
查看>>
软件之美: 易用性设计的目标及准则
查看>>
异步回调,事件,线程池与协程
查看>>
matlab函数:c2d离散化函数(待完善)
查看>>
java并发多面性
查看>>
TFS 测试用例导入、导出工具
查看>>
java -jstack
查看>>