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
  • 相关阅读:
    Linux Shell的18条常用命令整理
    git branch 命令查看分支、删除远程分支、本地分支
    比Xshel更好用的 FinalShell
    Centos7的目录结构
    准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure
    代码托管仓库之码云
    包管理工具之Pipenv
    Python的垃圾回收机制
    Django之Models操作
    Python操作数据库实战
  • 原文地址:https://www.cnblogs.com/yours1103/p/3286003.html
Copyright © 2011-2022 走看看