zoukankan      html  css  js  c++  java
  • 2020杭电多校 5C / HDU 6816

    HDU 6816 - Boring Game


    题意

    (n)张纸平铺在桌面上,一同从左向右折叠(k)

    给出一个长度为(2*n*2^k)的排列(P)

    将纸张从上往下,正反交替标记为排列(P)中的值

    问将纸张展开后得到的从上往下、从左往右的序列

    PIC




    思路

    不会找规律,直接暴力就完事了

    vector模拟将纸还原的过程(即最终状态为上图右半部分状态)

    所以需要还原(k)

    每一次将当前合法的上半部分倒序合并到下半部分,如图

    PIC2

    最后将还原出来的(2n)个vector倒序输出即可




    代码

    (312ms/1000ms)

    #include<bits/stdc++.h>
    using namespace std;
    
    vector<int> v[555555];
    
    void solve()
    {
        int n,k,m,d,cur;
        cin>>n>>k;
        m=n<<(k+1);
        for(int i=1;i<=m;i++)
        {
            cin>>d;
            v[i].clear();
            v[i].push_back(d);
        }
        cur=1;
        for(int t=1;t<=k;t++)
        {
            int mid=(cur+m)>>1;
            for(int i=cur;i<=mid;i++)
            {
                int siz=v[i].size();
                for(int j=siz-1;j>=0;j--) //从后往前加入下方vector内
                    v[mid+mid-i+1].push_back(v[i][j]);
            }
            cur=mid+1;
        }
        for(int i=m-n*2+1;i<=m;i++)
        {
            int siz=v[i].size();
            for(int j=siz-1;j>=0;j--) //从后往前输出
                cout<<v[i][j]<<(i==m&&j==0?'
    ':' ');
        }
    }
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);cout.tie(0);
        int T;cin>>T;
        while(T--)
            solve();
        return 0;
    }
    

  • 相关阅读:
    《浪潮》影评
    《白日梦想家》影评笔记
    mac清理磁盘方法
    java性能监控器VisualVM
    python部署工具fabric
    linux缓存nscd
    ajax取返回值的方法
    python中__name__ = '__main__' 的作用
    使用nsswitch控制linux dns解析顺序
    SQLAlchemy中filter()和filter_by()的区别
  • 原文地址:https://www.cnblogs.com/stelayuri/p/13435346.html
Copyright © 2011-2022 走看看