您的位置:首页 > 其它

Uva - 120 - Stacks of Flapjacks

2015-06-21 10:41 113 查看




选择排序,从大到小顺序一次排列,每次先把第 i 大的翻到最上面,然后在翻到正确的位置。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <bitset>
#include <cassert>
#include <cmath>

using namespace std;

const int maxn = 35;
int n, pancakes[maxn];

void filp(int p)
{
for (int i = 0; i < p - i; i++) {
swap(pancakes[i], pancakes[p - i]);
}
cout << n - p << " ";
}

int main()
{
ios::sync_with_stdio(false);
string s;
while (getline(cin, s)) { // 不知道一次有多少个,直接读取一行
cout << s << endl;
stringstream ss(s);
n = 0;
while (ss >> pancakes
) {
n++;
}

for (int i = n - 1; i > 0; i--) {
int maxP = max_element(pancakes, pancakes + i + 1) - pancakes;
if (maxP == i) { // 如果最大元已经在最底部,不用翻转了
continue;
}
if (maxP > 0) {
filp(maxP); // 大最大元先翻到最上面
}
filp(i); // 然后翻到正确的位置
}
cout << "0\n";
}

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