记录编号 |
600507 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
friends |
最终得分 |
100 |
用户昵称 |
李奇文 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
15.958 s |
提交时间 |
2025-05-05 15:57:08 |
内存使用 |
5.26 MiB |
显示代码纯文本
#include<bits/stdc++.h>
#define re register
using namespace std;
int n,k,a[100005],v[250000<<1];
int m,mn;
bool check(int mid){
memset(v,0,sizeof(v));
for(int i=1; i<=mid;i++){
int t=0;
for(int j=1;j<=n;j++){
if((i+a[j]-1)/a[j]%2){
t|=1<<j-1;
}
}
v[t]++;
}
for(int j=0;j<n;j++){
for(int i=0;i<mn;i++){
if(i>>j&1){
v[i]+=v[i^(1<<j)];
}
}
}
for(int i=1;i<mn;i++){
if(v[(mn-1)^i]>mid-k*__builtin_popcount(i)){
return 0;
}
}
return 1;
}
int main(){
freopen("friends.in","r",stdin);
freopen("friends.out","w",stdout);
cin>>n>>k;
mn= 1 << n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=0,r=2*n*k;
while(l<r){
int mid=l+r>>1;
if(check(mid)){
r=mid;
}else{
l=mid+1;
}
}
cout<<l;
return 0;
}