zoukankan      html  css  js  c++  java
  • Codeforces Round #197 (Div. 2) : E

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

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

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

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

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

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

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

     1 #include<cstdio>
     2 #include<vector>
     3 #include<algorithm>
     4 #define maxn 1009
     5 using namespace std;
     6 int a[maxn],n;
     7 vector<int>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
    ",l.size());
    30     for(int i=l.size()-1;i>=0;i--)
    31         printf("%d %d
    ",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
  • 相关阅读:
    开发者和设计师:为何我们不能好好相处?(转载)
    PHP ACCESS
    来自腾讯的session跨域,跨服代码
    php大括号妙用。
    php mysql 记录集的操作
    开始我的代码笔记
    收藏一个php用的一个页码按钮类
    修改过后的数字英文字符生成图片代码
    搜藏一点php session 常用方法
    php包含漏洞收集程序代码
  • 原文地址:https://www.cnblogs.com/yours1103/p/3286003.html
Copyright © 2011-2022 走看看