1 条题解

  • 0
    @ 2026-5-5 2:49:16
    #include "swaps.h"
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=512;
    int n,B,to,ord[maxn];
    vector<int> v;
    void add(int x,int y){
    	if(ord[x]>=n||ord[y]>=n){
    		if(ord[x]>ord[y]) swap(ord[x],ord[y]);
    		return;
    	}
    	schedule(ord[x]+1,ord[y]+1);
    	return;
    }
    void upd(int x,int y){
    	if(ord[x]<n&&ord[y]<n){
    		if(!v[to]) swap(ord[x],ord[y]);
    		to++;
    	}
    	return;
    }
    void solve(int _n,int lim){
    	n=_n;
    	for(B=1;B<n;B<<=1);
    	for(int i=0;i<B;i++) ord[i]=i;
    	for(int len=1;len<B;len<<=1){
    		for(int i=0;i<B;i+=(len<<1)) reverse(ord+i+len,ord+i+(len<<1));
    		for(int s=len;s;s>>=1){
    			for(int i=0;i<B;i+=(s<<1)){
    				for(int j=0;j<s;j++) add(i+j,i+j+s);
    			}
    			v=visit(),to=0;
    			for(int i=0;i<B;i+=(s<<1)){
    				for(int j=0;j<s;j++) upd(i+j,i+j+s);
    			}
    		}
    	}
    	vector<int> ret;
    	for(int i=0;i<n;i++) ret.push_back(ord[i]+1);
    	answer(ret);
    	return;
    }
    
    
    • 1

    「BalticOI 2021 Day2」The Collection Game

    信息

    ID
    10569
    时间
    1500ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者