Boring Game【vector模拟】-2020杭电多校5

题意:

给出 (n) 张叠在一起的纸,现在将其连续从左向右折叠 (k) 次,再从上到下标上序号,问展开后的序号是怎么样的。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6816

分析:


代码:

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=1e6+6;
vector<int>p[N];
int main()
{
    int T,n,k;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&k);
        int num=2*n*(1<<k),x,tk=k;
        for(int i=1;i<=num;i++)
        {
            p[i].clear();
            scanf("%d",&x);
            p[i].pb(x);
        }
        int s=1,t=num;
        while(tk--)
        {
            t=(s+num)/2;//cout<<"s="<<s<<" t="<<t<<endl;
            for(int i=s;i<=t;i++)//折叠区间
            {//cout<<i<<" - "<<s+num-i<<endl;
                for(int j=p[i].size()-1;j>=0;j--)
                    p[s+num-i].pb(p[i][j]);
                p[i].clear();
            }
            s+=(t-s+1);
        }
        for(int i=t+1;i<=num;i++)
        {
            for(int j=p[i].size()-1;j>=0;j--)
                printf("%d%c",p[i][j],(j==0&&i==num)?'
':' ');
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/1024-xzx/p/13438041.html