题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1315 题意:中文题诶~ 思路:位或(|)运算是二进制位有一个为1就为1,否则为0.你们我们不难想到如果大于k的元素加入运算中其结果一定大于k, 与k异或结果大于k的元素加入运算中其结果一定不为k, 所以我们只要考虑剩下的元素就好了。剩下的也不难想到,对于当前二进制位,若k为1,那么我们可以把所有当前二进制位为1的元素去掉,其子集异或结果一定...
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1069有N堆石子。A B两个人轮流拿,A先拿。每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N及每堆石子的数量,问最后谁能赢得比赛。例如:3堆石子,每堆1颗。A拿1颗,B拿1颗,此时还剩1堆,所以A可以拿到最后1颗石子。 Input第1行:一个数N,表示有N堆石子。(1...
将整型转化为二进制(此部分为转载):函数:itoa(integer to array)功能:把一整数转换为字符串用法:char *itoa(int value, char *string, int radix); 将int整型数转化为一个字符串,并将值保存在数组string中。value: 待转化的整数。radix:是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。* string:保存转换后得到的字符串。返回值:char *:指向生成的字符串, 同*string...
整数逆位运算描述对整数除符号为外的数字进行逆位操作。????????????????????????????????????????????????????????????????????????????????????????????????例如 x = 123,返回321;x = -123,返回-321。???????????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????????????????????输入格式 ???????...
1.题目
LeetCode;338. 比特位计数
【medium】
2.解题
方法一:动态规划
参考:https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode-solution-0t1i/java:
class Solution {public int[] countBits(int num) {int[] res = new int[num + 1];for (int i = 1; i <= num; i++) {res[i] = res[i & (i - 1)] + 1;}return res;}
}时间复杂度:O(n)
空间复杂度:O(n)
https://www.luogu.org/problemnew/show/P1582
要求用最少的瓶子,那肯定不能有两个一样的瓶子,否则合并更优.
枚举其二进制位,每次加上lowbit,将最后一个1加上.显然最多logn次.#include<bits/stdc++.h>
using namespace std;
#define ll long longll n,k;int main(){cin>>n>>k;bitset<32> b(n);//cout<<b<<endl;ll sum=0;while(b.count()>k){ll cn=n&-n;//cout<<bitset<32>(cn)<<endl;n+=cn;sum+=cn;b=bitset<32>(n);//cout<<b<<end...
题意:一些公司决定搭建一些光纤网络,单向的,如果从第一点到第二点,有ab两个公司可以搭建,第二点到第三点有ac两个公司可以搭建,第一点到第三点有d公司可以搭建,则第一点到第三点有a、d两个公司可以搭建,a是通过第二点,d是直接连接两点。现在给你这么一个光纤网络,问某两点之间有哪些公司可以搭建起网络。首先这题是个多源点的,有点像最短路的思想,如果让我做我肯定硬着头皮找相同的字母,不过我看到图论书里的想法很好,...
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。#include <iostream>
#include <cstdio>
#include <cstring>
#include<vector>
usingnamespace std;
class Solution {
public:int NumberOf1(int n) {int count=0;unsigned int mark=1; while(mark){if (n & mark){ //以二进制计算与运算, mark为32位的1count++;}mark=mark<<1; 将1的左移,依次比较n的二进制形式的每一位}return count;}
...