• UVa11925 Generating Premutations


    留坑(p.254)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<algorithm>
     5 #include<iostream>
     6 
     7 using namespace std;
     8 
     9 void setIO(const string& s) {
    10     freopen((s + ".in").c_str(), "r", stdin);
    11     freopen((s + ".out").c_str(), "w", stdout);
    12 }
    13 template<typename Q> Q read(Q& x) {
    14     static char c, f;
    15     for(f = 0; c = getchar(), !isdigit(c); ) if(c == '-') f = 1;
    16     for(x = 0; isdigit(c); c = getchar()) x = x * 10 + c - '0';
    17     if(f) x = -x;
    18     return x;
    19 }
    20 template<typename Q> Q read() {
    21     static Q x; read(x); return x;
    22 }
    23 
    24 const int N = 300 + 10;
    25 
    26 #include<vector>
    27 vector<int> a, b;
    28 
    29 //#define dprintf(s, arg...) fprintf(stderr, s, ##arg)
    30 
    31 void p1() {
    32     swap(a[0], a[1]);
    33     putchar('1');
    34 //    dprintf("1:");
    35 //    for(unsigned i = 0; i < a.size(); i++) {
    36 //        dprintf("%d ", a[i]);
    37 //    }
    38 //    dprintf("
    ");
    39 }
    40 
    41 void p2() {
    42     int t = a[0];
    43     a.erase(a.begin());
    44     a.push_back(t);
    45     putchar('2');
    46 //    dprintf("2:");
    47 //    for(unsigned i = 0; i < a.size(); i++) {
    48 //        dprintf("%d ", a[i]);
    49 //    }
    50 //    dprintf("
    ");
    51 }
    52 
    53 bool ok() {
    54     for(unsigned i = 0; i < a.size(); i++) {
    55         if(a[i] ^ b[i]) return 0;
    56     }
    57     return 1;
    58 }
    59 
    60 int main() {
    61 #ifdef DEBUG
    62     freopen("in.txt", "r", stdin);
    63     freopen("out.txt", "w", stdout);
    64 #endif
    65     
    66     int n;
    67     while(read(n)) {
    68         a.clear(), b.clear();
    69         for(int i = 1; i <= n; i++) {
    70             a.push_back(i);
    71             b.push_back(read<int>());
    72         }
    73         if(a[1] == b[0]) p1();
    74         for(int i = 0; i < n; i++) {//½«µÚi¸öÒƵ½×îºó 
    75             while(a[0] != b[i]) p2();
    76             if(ok()) break;
    77             if(i != n-1) while(a[1] != b[i+1]) p1(), p2();
    78             p2();
    79         }
    80         putchar('
    ');
    81 //        dprintf("
    ");
    82     }
    83     
    84     return 0;
    85 }
    View Code
  • 相关阅读:
    洛谷 P2480 [SDOI2010]古代猪文
    [六省联考2017]组合数问题
    数据结构--左偏树(可并堆)
    图论--tarjan求割点
    图论--tarjan缩点
    图论--DFS-SPFA求负环
    图论--tarjan求lca
    洛谷 P2163 [SHOI2007]Tree 园丁的烦恼
    数据结构--主席树(不带修改)
    洛谷 P1712 区间
  • 原文地址:https://www.cnblogs.com/showson/p/5097193.html
Copyright © 2020-2023  润新知