zoukankan      html  css  js  c++  java
  • [CF1492B] Card Deck

    [CF1492B] Card Deck

    Description

    你有一叠扑克,共 (n) 张,第 (i) 张上有一个 (1)(n) 之间的整数 (p_i)。牌从下到上编号,即 (p_1) 是底下那张牌的数字。所有 (p_i) 互不相同。现在你要重排这扑克,每次你可以从原牌堆顶上拿走 (k) 张,按照原来的顺序放到新牌堆顶上。重复以上过程直到原牌堆空。定义一个牌堆的值为 (sumlimits_{i=1}^nn^{n-i}p_i),求牌堆值最大时的新牌堆。

    Solution

    每次添加进去的是当前串的一个后缀,然后这个后缀就被砍掉了,不会再动了

    砍的位点是剩余部分(是一个前缀)的最大值位置

    所以我们求出每个前缀的最大值位置,然后每次将这后面的输出即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    void solve()
    {
        int n;
        cin >> n;
        vector<int> a(n + 2);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
    
        int pos = n;
        vector<int> maxpos(n + 2);
        for (int i = 1; i <= n; i++)
            if (a[maxpos[i - 1]] > a[i])
                maxpos[i] = maxpos[i - 1];
            else
                maxpos[i] = i;
    
        while (pos)
        {
            int tmp = maxpos[pos];
            for (int i = tmp; i <= pos; i++)
                cout << a[i] << " ";
            pos = tmp - 1;
        }
    
        cout << endl;
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
    
        while (t--)
        {
            solve();
        }
    }
    
  • 相关阅读:
    DVWA 通关指南:File Upload(文件上传)
    DVWA 通关指南:File Inclusion(文件包含)
    DVWA 通关指南:Command Injection (指令注入)
    DVWA 通关指南:Brute Force (爆破)
    CTF-WEB:Git 源码泄露
    2021.1.16 人月神话阅读笔记01
    2021.1.15 HTML基本知识
    2021.1.13
    2021.1.11
    2021.1.8 GitHub注册
  • 原文地址:https://www.cnblogs.com/mollnn/p/14453802.html
Copyright © 2011-2022 走看看