文件详细信息

下载本文件

本文件的大小为 752 字节。

#include<cstdio>
#include<cstring>
template<typename T>
void read(T&num){
	int ch=getchar();
	num=0;
	while(ch<48||ch>57)ch=getchar();
	while(ch>=48&&ch<=57)num=(num<<3)+(num<<1)+(ch^48),ch=getchar();
}
typedef long long ll;
const int maxn=100005;
const ll inf=0x3f3f3f3f3f3f3f3f;
int n,cnt[64][2];
ll m,b,f[64][maxn];
template<typename T>
void chkmin(T&a,T b){
	a>b&&(a=b);
}
int main(){
	read(n),read(m);
	for(int i=1;i<=n;i++){
		read(b);
		for(int i=0;i<60;i++)cnt[i][b&1]++,b>>=1;
	}
	memset(f,63,sizeof(f));
	f[60][0]=0;
	for(int i=59;i>=0;i--)
		for(int j=0;j<n;j++)
			for(int k=0;k<=1;k++){
				int l=(j<<1)-cnt[i][k]+(m>>i&1);
				if(l>=0&&l<n)chkmin(f[i][l],(f[i+1][j]<<1)+(k^1));
			}
	printf("%lld\n",f[0][0]!=inf?f[0][0]:-1);
	return 0;
}