欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

2020多校第五场Boring Game

程序员文章站 2022-06-25 16:18:50
思路对于每次展开,挑选当前最中间的位置作为 mid ,将上半段翻转一下贴到下半段的左边,直接用 vector 暴力维护整个过程。代码#include #include #include #include #include #include #define ll long longusing namespace s...

思路

对于每次展开,挑选当前最中间的位置作为 mid ,将上半段翻转一下贴到下半段的左边,直接用 vector 暴力维护整个过程。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>

#define ll long long
using namespace std;
const int maxn=6e6+6;
const int N = 1e6+5;
const ll mod=998244353;
const ll MOD=998244353;

ll power(ll x,ll a)
{
    ll ans=1;
    while(a)
    {
        if(a&1)
        {
            ans=ans*x%mod;
        }
        x=x*x%mod;
        a>>=1;
    }
    return ans;
}
ll a,b,ans;
char optr;
int base;
bool isop(char c)
{
    if(c=='+'||c=='-'||c=='*'||c=='/'||c=='=')
        return 1;
    else
        return 0;
}
int getn(char c)
{
    if(c>='A')
        return c-'A'+10;
    else
        return c-'0';
}
void fun(string s)
{
    a=0;
    b=0;
    ans=0;
    int i;
    for(i=0; !isop(s[i]); i++)
    {
        a*=base;
        a+=getn(s[i]);
    }
    optr=s[i];
    for(i++; s[i]!='='; i++)
    {
        b*=base;
        b+=getn(s[i]);
    }
    for(i++; i<s.size(); i++)
    {
        //cout<<getn(s[i])<<' ';
        ans*=base;
        ans+=getn(s[i]);
    }
}
vector<int>node[N];

int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);
    int w;
    cin>>w;
    while(w--)
    {
        int n,k;
        scanf("%d%d",&n,&k);
        int limit=2*n*(1<<k);
        for(int i=1; i<=limit; i++)
            node[i].clear();
        for(int i=1; i<=limit; i++)
        {
            int num;
            scanf("%d",&num);
            node[i].push_back(num);
        }
        int mid=1;
        while(k--)
        {
            mid=mid+limit>>1;
            for(int j=mid+1; j<=limit; j++)
            {
                int pos=mid-(j-(mid+1));
                reverse(node[pos].begin(),node[pos].end());
                node[j].insert(node[j].begin(),node[pos].begin(),node[pos].end());
                node[pos].clear();
            }
        }
        bool first=true;
        for(int i=limit-2*n+1; i<=limit; i++)
            for(int j=0; j<node[i].size(); j++)
            {
                if(first)
                    first=false;
                else
                    putchar(' ');
                printf("%d",node[i][j]);
            }
        puts("");
    }

}

本文地址:https://blog.csdn.net/CreatureNoWords/article/details/107900363