奇怪代码求调
查看原帖
奇怪代码求调
577683
Neil_Seniorious楼主2023/10/5 14:22
#include<cstdio>
inline int read(){
	int x=0;short f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return x*f;
}

int n,m,x,fz;
int d[42];

int find(int);
int work(int);

int main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++){
		x=read();
		fz=find(x);
		d[fz]++;
	}
	while(m--){
		x=read();
		printf("%d\n",work(x));
	}
	return 0;
}

int find(int k){
	x=0;
	while(!(k&1)){
		x++;
		k>>=1;
	}
	return x;
}
int work(int k){
	x=0;
	for(int i=42;i>=1;i--){
		if(d[i]){
			fz=d[i];
			while(k>=(1<<i)&&fz>0){
				k=k-(1<<i);
				fz--;
				x++;
			}
		}
	}
	if(k>0) return -1;
	return x;
}
2023/10/5 14:22
加载中...