RE 90求调
查看原帖
RE 90求调
369041
bdfs_then_csdn楼主2023/10/30 18:01

#include<bits/stdc++.h>
using namespace std;
int n,cnt[101],a[3000001],w,t,p,num,ans[3000001],b[3000001];
void upd(int x){while(1){if(!b[++cnt[x]])break;}}
int main(){
	cin>>n>>w;for(int i=1;i<=n;i++)scanf("%d",&a[i]),p+=(a[i]==w);
	for(int i=1;i<=n;i*=2)cnt[++t]=i;
	while(p){
		int f=0;
		for(int i=t;i>=1;i--){
			if(a[cnt[i]]==w){
				ans[++num]=cnt[i];b[cnt[i]]=1;
				for(int j=i;j<=t;j++)upd(j);
				p--;f=1;break;
			}
		}
		if(!f){
			ans[++num]=cnt[1];b[cnt[1]]=1;
			for(int i=1;i<=t;i++)upd(i);
		}
	}cout<<num<<endl;for(int i=1;i<=num;i++)printf("%d ",ans[i]);
	return 0;
}
2023/10/30 18:01
加载中...