首页 > 其他 > 详细

2020 Multi-University Training Contest 5 解题报告

时间:2020-08-05 00:41:38      阅读:138      评论:0      收藏:0      [点我收藏+]

1003

其实是签到题。现当于模拟这\(n\)张纸展开的过程,现当于每次把前一半逆时针旋转180度,随便模拟一下就过了。

#include <bits/stdc++.h>

using namespace std;

#define ll long long
ll input(){
	ll x=0,f=0;char ch=getchar();
	while(ch<‘0‘||ch>‘9‘) f|=ch==‘-‘,ch=getchar();
	while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar();
	return f? -x:x;
}

const int N=3e5+7;

list<int> G[N];

int n,k;
int L,R;
void dfs(int l,int r){
	if(r-l+1==n*2){
		L=l,R=r;
		return;
	}
	int mid=(l+r)>>1;
	int p1=mid,p2=mid+1;

	for(;p1>=l&&p2<=r;p1--,p2++){
		while(!G[p1].empty()){
			G[p2].push_front(G[p1].front());
			G[p1].pop_front();
		}
	}

	dfs(mid+1,r);
}

vector<int> Ans;

int main(){
	int T=input();
	while(T--){
		n=input(),k=input();
		int cnt=2*n*pow(2,k);
		Ans.clear();

		for(int i=1;i<=cnt;i++){
			G[i].clear();
			int a=input();
			G[i].push_front(a);
		}

		dfs(1,cnt);

		for(int i=L;i<=R;i++){
			for (auto j=G[i].begin();j!=G[i].end();++j) 
        		Ans.push_back(*j);
		}

		for(int i=0;i<Ans.size();i++){
			printf("%d%c",Ans[i],i==Ans.size()-1? ‘\n‘:‘ ‘);
		}
	}
}

2020 Multi-University Training Contest 5 解题报告

原文:https://www.cnblogs.com/-aether/p/13437146.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!