CodeForces - 1247C p-binary

mac2024-04-09  28

题目链接:https://vjudge.net/problem/CodeForces-1247C

题解:n-mp=2^x1+2^x2+...;令x=n-mp,f(x):二进制中1的个数;若m满足f(x)<=m<=x,则m为答案;

因为1.若f(x)>m,则无法匹配;当f(x)<m时,因为可能·存在这样2^3+2^3=2^4可以合并;2.二进制和最小值为m,所以x>=m;

#include<bits/stdc++.h> using namespace std; int num_1(int n){ int sum=0; while(n){ if(n&1) sum++; n>>=1; } return sum; } int main(){ int n,p; cin>>n>>p; int m=0; while(1){ n-=p; m++; if(n<=0) break; if(num_1(n)<=m){ if(n<m) break; cout<<m<<endl; return 0; } } cout<<-1<<endl; return 0; }

 

最新回复(0)