Codeforces Round #197 (Div. 2) : E
看了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的更多相关文章
- 线段树 Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations
题目传送门 /* 线段树的单点更新:有一个交叉更新,若rank=1,or:rank=0,xor 详细解释:http://www.xuebuyuan.com/1154895.html */ #inclu ...
- [置顶] Codeforces Round #197 (Div. 2)(完全)
http://codeforces.com/contest/339/ 这场正是水题大放送,在家晚上限制,赛后做了虚拟比赛 A,B 乱搞水题 C 我是贪心过的,枚举一下第一个拿的,然后选使差值最小的那个 ...
- Codeforces Round #197 (Div. 2) (A、B、C、D、E五题合集)
A. Helpful Maths 题目大意 给一个连加计算式,只包含数字 1.2.3,要求重新排序,使得连加的数字从小到大 做法分析 把所有的数字记录下来,从小到大排序输出即可 参考代码 #inclu ...
- Codeforces Round #197 (Div. 2)
A.Helpful Maths 分析:将读入的字符转化为数字,直接排个序就可以了. #include <cstdlib> #include <cstring> #include ...
- Codeforces Round #197 (Div. 2) C,D两题
开了个小号做,C题一开始看错范围,D题看了半小时才看懂,居然也升到了div1,囧. C - Xenia and Weights 给出一串字符串,第i位如果是1的话,表示有重量为i的砝码,如果有该种砝码 ...
- Codeforces Round #197 (Div. 2) : C
哎....这次的比赛被安叔骂的好惨! 不行呢,要虐回来: 这道搜索,老是写错,蛋疼啊! 果然是基础没打好! #include<cstdio> using namespace std; ], ...
- Codeforces Round #197 (Div. 2) : D
这题也是一个线段树的水题: 不过开始题目没看明白,害得我敲了一个好复杂的程序.蛋疼啊.... 最后十几分钟的时候突然领悟到了题意,但是还是漏掉一个细节,老是过不去... 以后比赛的时候不喝啤酒了,再也 ...
- Codeforces Round #197 (Div. 2) : B
也是水题一个,不过稍微要细心点.... 贴代码: #include<iostream> using namespace std; long long n,m; ; int main() { ...
- Codeforces Round #197 (Div. 2) : A
水题一个: 直接贴代码: #include<cstdio> #include<algorithm> #include<cstring> using namespac ...
随机推荐
- hibernate简单应用
Hibernate 第二章 核心API 和CURD实现 核心API介绍 单表操作方法 查询hql语句 1.认识hibernate 核心思想ORM:实现数据库中的文件一一映射为java中的实体类. 使用 ...
- FPGA异步时钟设计中的同步策略
1 引言 基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统.但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免. ...
- JQuery_AJAX简单笔记
<script type="text/javascript"> //Ajax方法 $.ajax({ type: "post", cache: fal ...
- Es6 之for of
能工摹形,巧匠窃意. -- 毕加索 2016-10-10 <!DOCTYPE HTML> <html> <head> <script src="tr ...
- javascript创建对象和属性的几种方式
一句话,javascript里面的对象,即是函数.方法. (一)第一种: a.声明对象:var JHSoft = JHSoft || {}; 或者 var JHSoft=new Object(); b ...
- oracle job interval·相关事例
描述 Interval参数值 每天运行一次 'SYSDATE + 1' 每小时运行一次 'SYSDATE + 1/24' 每10分钟运行一次 'SYSDATE + 10/(60*24)' 每30秒运行 ...
- cognos 10.2.2 Framework manager使用”数据源”新建查询主题
又做了一个简单的报表,就是在Framework Manager中写个sum()的sql出个报表,可以使用使用"数据源"新建查询主题 配置查询主题后修改SQL,注意全部都是大写,要和 ...
- SDL实现限制帧速
很多人都在SDL_PollEvent和SDL_WaitEvent之间纠结.前者会带来更好的帧数表现,但是CPU占用极大,可以直接吃掉一个核心.后者则基本不占用CPU,但是帧数会受到影响.有没有办法使两 ...
- android studio安装后卡在fetching Android sdk compoment information
解决办法: 找到android studio 安装目录下bin目录中(D:\Android\Android Studio\bin)的idea.properties文件,在文件末尾处添加disable. ...
- P1396 营救
P1396 营救 218 通过 571 提交 题目提供者yeszy 标签 二分 图论 并查集 福建省历届夏令营 难度 普及- 题目描述 "咚咚咚--""查水表!" ...