首页 > 其他分享 >codeforces 596 div2 p-binary(数位复杂度压缩)

codeforces 596 div2 p-binary(数位复杂度压缩)

时间:2022-12-12 19:37:46浏览次数:49  
标签:tmp binary 596 int res 复杂度 二进制 枚举 我们


题目大意:

已知:

codeforces 596 div2 p-binary(数位复杂度压缩)_c++

 同时 

codeforces 596 div2 p-binary(数位复杂度压缩)_复杂度_02

  ,问k最少为多少。

解题思路:

首先,我们看到这里有2的n次方,我们考虑能不能从二进制表示下手,我们通过移位来表示:得到公式

codeforces 596 div2 p-binary(数位复杂度压缩)_ci_03

 ,很直接的想法是我们让k从小到大进行枚举。那么我们怎么判断这条等式是否能够满足呢?

我们知道 xi在这里最小为0,所以n-kp最多可以拆减为n-kp个pow(2,0)相加,所以必须k<=(n-kp),同时k还有一个边界k>=res,其中res为n-kp的二进制表示中1的个数。例如:已知二进制表示为1100的一个数,我们不可能找到少于两项的pow(2,xi)求和,所以我们得到k的一个边界后,我们的k在枚举的时候假如符合这个边界,我们就认为这个k可以输出。那么k枚举到什么地方为止呢?我们可以看到k=31之后就不用再枚举了,因为n<pow(2,31),所以我们这里当k=31时,n-kp<pow(2,31),一个数小于pow(2,x),那么这个数肯定可以用x位来表示,所以走到k=31时,应该是能够表示的了。

废话:

这里我们使用了二进制复杂度压缩的思想,这种思想我们之前在树状数组也见过。这种思想非常重要!

另外这里也告诉我们要会一定的公式变形。

#include <bits/stdc++.h>
using namespace std;
int main(){
int n,p;cin>>n>>p;
for(int k=1;k<=31;k++){
int no=n-k*p;
if(no<0)continue;
int tmp=no;
int res=0;
while(tmp){
if(tmp&1)res++;
tmp>>=1;
}
if(k<res)continue;
if(k>n-k*p)continue;
cout<<k<<endl;
return 0;
}
cout<<-1<<endl;
return 0;
}

 

标签:tmp,binary,596,int,res,复杂度,二进制,枚举,我们
From: https://blog.51cto.com/u_15910522/5931529

相关文章

  • O(1)空间复杂度找到相交链表的交点
      相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:​​​​在节点c1开始相交。解题思路:首先将一条链首尾连起来,这时候就变成了找环的入口点的问题......
  • 原地合并两个排序数组 O(1)空间复杂度,O(n)时间复杂度
    问题:给你两个从小到大的数组a,b。在不申请额外空间下,往a填充a和b合并后的排序数组(假设a的空间是足够的)。第一种方法:很直觉的思路是,我们采取和归并排序时同样的策略,每次拿出最......
  • 2021冬--简单描述时间复杂度
    时间复杂度一般用来描述随着数据量的增加时间变化的趋势,如第一次给我1个鸡腿和100个鸡蛋,第二次给我1个鸡腿和1个鸡蛋,计算我吃完鸡腿的用时,那么时间复杂度是O(1),不论给我多......
  • golang mysql查询textRows和binaryRows解惑
    1.问题之前写了一套统一mysql返回数据的解析库:rows,err:=ms.dbInst.Query(s,args...) //执行SQL语句,比如select*fromusersiferr!=nil{panic(err)}......
  • 算法复杂度分析概要
    一:渐近符号1.1符号的辨析1.1.1符号OO,读作“大O”,非正式来说,O(g(n))是增长次数小于等于g(n)及其常数倍(n趋向于无穷大)的函数集合。  定义如果函数f(n)包含在O(g(n))中,......
  • LeetCode: 236. Lowest Common Ancestor of a Binary Tree
    LeetCode:236.LowestCommonAncestorofaBinaryTree题目描述Givenabinarytree,findthelowestcommonancestor(LCA)oftwogivennodesinthetree.Accordi......
  • [Typescript] 124. Binary to Decimal
    Implement BinaryToDecimal<S> whichtakesanexactstringtype S consisting0and1andreturnsanexactnumbertypecorrespondingwith S when S isrega......
  • 124. Binary Tree Maximum Path Sum(难)
    Givenabinarytree,findthemaximumpathsum.Forthisproblem,apathisdefinedasanysequenceofnodesfromsomestartingnodetoanynodeinthetreeal......
  • 98. Validate Binary Search Tree
    Givenabinarytree,determineifitisavalidbinarysearchtree(BST).AssumeaBSTisdefinedasfollows:Theleftsubtreeofanodecontainsonlynodeswit......
  • Remove Node in Binary Search Tree
    GivenarootofBinarySearchTreewithuniquevalueforeachnode.Removethenodewithgivenvalue.Ifthereisnosuchanodewithgivenvalueinthebinary......