美文网首页
uva 120 stacks of flapjacks 贪心

uva 120 stacks of flapjacks 贪心

作者: 无令便逐风 | 来源:发表于2018-04-02 16:50 被阅读0次

链接戳这里
有一叠煎饼,每张煎饼有它的尺寸,每次操作可以用刀从某一层把该层上面的所有煎饼翻过来。请问怎么翻能使得所有煎饼从上到下尺寸为从小到大?

8            7            2
4            6            5
6            4            8
7  ->翻第3层  8 ->翻第1层   4
5            5            6
2            2            7

思路:因为每次在a层以上的翻转都不会影响a层下面的煎饼,于是可以每次都想办法让尺寸大的煎饼到下面它该去的位置。所以方法是:选择还没有到正确位置的尺寸最大的煎饼,将它翻到最上层(如果它不在最上层的话),再把它翻到它应该去的层。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

#define rep(i,a,b) for(int i=(a);i<(b);++i)
#define rrep(i,a,b) for(int i=(a-1);i>=(b);--i)
#define lb lower_bound
const int inf = 0x3f3f3f3f, maxN = 505;
int N, M, cnt;
// 元素和备份的参考数组
int e[35], bk[35];

// 翻转第i层
void f(int x) {
    x = cnt - (x - 1);
    // 现在有x个元素
    rep(i, 0, x / 2)
        swap(e[i], e[x - 1 - i]);
}

int main() {
    // freopen("data.in", "r", stdin);
    cnt = 0;
    while (~scanf("%d", &e[cnt++])) {
        while (getchar() != '\n')
            scanf("%d", &e[cnt++]);
        rep(i, 0, cnt)
            printf("%d ", e[i]);
        puts("");

        memcpy(bk, e, sizeof(e));
        sort(bk, bk + cnt);
        rrep(i, cnt, 0) {
            if (bk[i] != e[i]) {
                int idx;
                for (idx = 0; idx < cnt; ++idx)
                    if(e[idx] == bk[i])
                        break;
                if (idx != 0) {
                    f(cnt - idx);
                    printf("%d ", cnt - idx);
                }
                f(cnt - i);
                printf("%d ", cnt - i);
            }
        }
        puts("0");
        cnt = 0;
    }
    return 0;
}

相关文章

  • uva 120 stacks of flapjacks 贪心

    链接戳这里有一叠煎饼,每张煎饼有它的尺寸,每次操作可以用刀从某一层把该层上面的所有煎饼翻过来。请问怎么翻能使得所有...

  • 2019.01.25算法题:UVA - 11389

    UVA 11389 - The Bus Driver Problem (贪心) 题目地址:http://vjudg...

  • uva120

  • Uva(1437)(String painter)

    链接:https://vjudge.net/problem/UVA-1437思路:想了半天也没啥思路,总感觉贪心能...

  • UVa11729-贪心算法

    题目链接:点击这里此题可用简单的贪心算法,具体可见CLRS中的贪心算法介绍。可使用Exchange策略进行证明:当...

  • UVa112992 贪心算法实现

    题目链接:点击这里此题可用简单的贪心算法,因为要找能砍掉某个头的能力值最小的骑士,可以先排序,再对每个头进行选择,...

  • Stacks

    HStack struct HStackA view that arranges its children in ...

  • 素数练习题

    UVA 10375 UVA 10791 UVA10375 Choose and divide 题解 先素数打表,然...

  • 汇率换算,还可以更简单 - Stacks 2.0

    其实很早就介绍过「Stacks」这款汇率工具「简洁易用即可 - 汇率转换 Stacks - Pinapps - 知...

  • 有趣的数学题

    UVA12716 UVA11582 UVA12716 GCD XOR 题解 参考这题用到2个结论a ^ b = c...

网友评论

      本文标题:uva 120 stacks of flapjacks 贪心

      本文链接:https://www.haomeiwen.com/subject/xssxhftx.html