您的位置:首页 > 其它

UVa11925 Generating Premutations

2016-01-03 21:16 260 查看
留坑(p.254)

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>

using namespace std;

void setIO(const string& s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
template<typename Q> Q read(Q& x) {
static char c, f;
for(f = 0; c = getchar(), !isdigit(c); ) if(c == '-') f = 1;
for(x = 0; isdigit(c); c = getchar()) x = x * 10 + c - '0';
if(f) x = -x;
return x;
}
template<typename Q> Q read() {
static Q x; read(x); return x;
}

const int N = 300 + 10;

#include<vector>
vector<int> a, b;

//#define dprintf(s, arg...) fprintf(stderr, s, ##arg)

void p1() {
swap(a[0], a[1]);
putchar('1');
//    dprintf("1:");
//    for(unsigned i = 0; i < a.size(); i++) {
//        dprintf("%d ", a[i]);
//    }
//    dprintf("\n");
}

void p2() {
int t = a[0];
a.erase(a.begin());
a.push_back(t);
putchar('2');
//    dprintf("2:");
//    for(unsigned i = 0; i < a.size(); i++) {
//        dprintf("%d ", a[i]);
//    }
//    dprintf("\n");
}

bool ok() {
for(unsigned i = 0; i < a.size(); i++) {
if(a[i] ^ b[i]) return 0;
}
return 1;
}

int main() {
#ifdef DEBUG
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif

int n;
while(read(n)) {
a.clear(), b.clear();
for(int i = 1; i <= n; i++) {
a.push_back(i);
b.push_back(read<int>());
}
if(a[1] == b[0]) p1();
for(int i = 0; i < n; i++) {//½«µÚi¸öÒƵ½×îºó
while(a[0] != b[i]) p2();
if(ok()) break;
if(i != n-1) while(a[1] != b[i+1]) p1(), p2();
p2();
}
putchar('\n');
//        dprintf("\n");
}

return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: