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

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

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

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

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

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

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

 #include<cstdio>
#include<vector>
#include<algorithm>
#define maxn 1009
using namespace std;
int a[maxn],n;
vector<int>l,r;
bool found=;
int checkleft()
{
for(int i=;i<=n;i++)
if(a[i]!=i) return i;
return -;
}
int checkright()
{ for(int i=n;i>;i--)
if(a[i]!=i) return i;
return -;
}
int getpos(int x)
{
for(int i=;i<=n;i++)
if(a[i]==x) return i;
}
void print()
{
printf("%d\n",l.size());
for(int i=l.size()-;i>=;i--)
printf("%d %d\n",l[i],r[i]);
} void dfs(int level)
{
if(checkleft()==-)
{
print();
found=;
}
if(found||level==) return;
int ll=checkleft();
int pp=getpos(ll);
reverse(a+ll,a+pp+);
l.push_back(ll);
r.push_back(pp);
dfs(level+);
if(found) return;
reverse(a+ll,a+pp+);
l.pop_back();
r.pop_back();
int rr=checkright();
pp=getpos(rr);
reverse(a+pp,a+rr+);
l.push_back(pp);
r.push_back(rr);
dfs(level+);
if(found) return;
reverse(a+pp,a+rr+);
l.pop_back();
r.pop_back();
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
dfs();
return ;
}

Codeforces Round #197 (Div. 2) : E的更多相关文章

  1. 线段树 Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations

    题目传送门 /* 线段树的单点更新:有一个交叉更新,若rank=1,or:rank=0,xor 详细解释:http://www.xuebuyuan.com/1154895.html */ #inclu ...

  2. [置顶] Codeforces Round #197 (Div. 2)(完全)

    http://codeforces.com/contest/339/ 这场正是水题大放送,在家晚上限制,赛后做了虚拟比赛 A,B 乱搞水题 C 我是贪心过的,枚举一下第一个拿的,然后选使差值最小的那个 ...

  3. Codeforces Round #197 (Div. 2) (A、B、C、D、E五题合集)

    A. Helpful Maths 题目大意 给一个连加计算式,只包含数字 1.2.3,要求重新排序,使得连加的数字从小到大 做法分析 把所有的数字记录下来,从小到大排序输出即可 参考代码 #inclu ...

  4. Codeforces Round #197 (Div. 2)

    A.Helpful Maths 分析:将读入的字符转化为数字,直接排个序就可以了. #include <cstdlib> #include <cstring> #include ...

  5. Codeforces Round #197 (Div. 2) C,D两题

    开了个小号做,C题一开始看错范围,D题看了半小时才看懂,居然也升到了div1,囧. C - Xenia and Weights 给出一串字符串,第i位如果是1的话,表示有重量为i的砝码,如果有该种砝码 ...

  6. Codeforces Round #197 (Div. 2) : C

    哎....这次的比赛被安叔骂的好惨! 不行呢,要虐回来: 这道搜索,老是写错,蛋疼啊! 果然是基础没打好! #include<cstdio> using namespace std; ], ...

  7. Codeforces Round #197 (Div. 2) : D

    这题也是一个线段树的水题: 不过开始题目没看明白,害得我敲了一个好复杂的程序.蛋疼啊.... 最后十几分钟的时候突然领悟到了题意,但是还是漏掉一个细节,老是过不去... 以后比赛的时候不喝啤酒了,再也 ...

  8. Codeforces Round #197 (Div. 2) : B

    也是水题一个,不过稍微要细心点.... 贴代码: #include<iostream> using namespace std; long long n,m; ; int main() { ...

  9. Codeforces Round #197 (Div. 2) : A

    水题一个: 直接贴代码: #include<cstdio> #include<algorithm> #include<cstring> using namespac ...

随机推荐

  1. Java基础知识强化之IO流笔记62:三种方式实现键盘录入

    1. 三种方式实现键盘录入     System.in 标准输入流.是从键盘获取数据的 键盘录入数据三种方式:  A:main方法的args接收参数.  java HelloWorld hello w ...

  2. youku的js脚本的工具函数和初始化方法

    定义日志输出函数 (function(){ if(window['console']){ return; } window['console'] = { log: function(){} ,clea ...

  3. 加快modelsim仿真速度的方法(原创)

    ①仿真精度越高,仿真效率月底. 仿真时采用`timescale 1ns/1ns比采用1ns/100ps的仿真效率高 simulation was two billion ns. ②clock gene ...

  4. react中的坑

    9. 渲染界面的时候让滚动条回到顶部 //渲染界面的时候让滚动条回到顶部 componentDidMount() { window.scrollTo(0,0); } 路由: <Route pat ...

  5. C#垃圾回收机制详解

    一.托管代码/非托管代码 C#代码通过C#编译器编译成程序集,程序集由微软中间语言组成,CLR会为程序集开辟一个应用程序域,程序集就是运行在这个应用程序域里面的,应用程序域是相互独立的,互不影响. 托 ...

  6. 如何注册ActiveX打印控件

    一.看系统是32位还是64位的.(以64位为例) 二.先找到你的wfPrint.OCX文件所在路径 三.找到SysWOW64所在的命令控制符 四.最后在该cmd下注册 就可以了.

  7. effective c++(04)之对象使用前初始化

    对于内置类型以外的初始化责任落在构造函数身上.如下: class PhoneNumber{}; class ABEntry{ public: ABEntry( const string& na ...

  8. Oracle初始化

    /*第1步:创建临时表空间 */ create temporary tablespace mdb_temp tempfile 'G:\data\oracle\mdb_temp.ora' size 10 ...

  9. 类库探源——System.Drawing

    一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.D ...

  10. CSS 的选择符

    CSS是什么? 如果说元素是标记代码的构建块料,那么CSS就是约束这些构建块料样式的规则. CSS规则的组成 CSS的规则由 选择符 和属性,值组成. Css选择符:选择符是规则中用于确定样式所涵盖的 ...