51nod 1413:权势二进制】的更多相关文章

1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB  一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input示例 9 Output示例 9思路:完全背包刚刚装…
1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input示例…
题意 : 一个十进制整数被叫做权势二进制, 当他的十进制表示的时候只由0或1组成.例如0, 1, 101, 110011都是权势二进制而2, 12, 900不是.当给定一个n (1<=n<=1,000,000)的时候, 计算一下最少要多少个权势二进制相加才能得到n. 分析 : 由于权势二进制可以在任意一位构造出1或者0, 那我就可以让每一位都在同时减1, 直到某一位变成0, 继续减其他位, 直到全部都等于0.例如 23303, 可以先构造11101进行相减, 使得除了零外的每一位都减1, 减两…
本来刚开始还是想用每一位 -1的个数 然后再乘以10  不断累加 后来发现 完全不是这回事啊  因为本身就是0 和 1 所以只要记录出现的最大的数字 就是答案  因为 n >= 1 // 所以不需要考虑 0 也是1的情况 #include<bits/stdc++.h> using namespace std; ]; int main() { ; cin >>s; int l=strlen(s); ;i<l;i++) { res = max(res,s[i]-'); }…
1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制表示的时候仅仅由0或1组成.比如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才干得到n. Input 单组測试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input演…
一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据.  第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Sample Input 9 Sample Output 9 题解:无论给的什么数,只要找到这个数中每个位中最大的那个数x就可以了,用x个数,每个数都是这么长度的,其他…
思路: 直接在串里找个最大的值就好了: #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; const int INF=0x7fffffff; const int N=211; char a[N]; int main() { int ans=0; scanf("…
51Nod - 1413 权势二进制 题意:就是讲给出一个数n,让你求最少由多少个像0,1,10,11......这样的二进制数相加构成:样例n=9就是由9个二进制1相加组成,我不懂比赛的时候我为什么没有看懂题目在讲什么:再举个例子吧!n=2333 就有二进制1111,1111,111三个数相加而成: 代码: #include<iostream> #include<cstdio> #include<cmath> using namespace std; int main…
A.Parenthesis 括号匹配的问题有一种经典的做法. 将左括号看成1,右括号看成-1,做一遍前缀和sum. 括号序列是合法的当且仅当\(sum[n]=Min(sum[1],sum[2]....sum[n])=0\)时成立. 于是问题变成了交换两个括号后如何维护sum数组的值. 实际上交换a和b之后只会影响到\((sum[a],sum[a+1]....sum[b-1])\). 1.\(s[a]=(,s[b]=)\) 对应的区间减2. 2.\(s[a]=),s[b]=(\) 对应的区间加2.…
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 题解:怎么用二进制优化多重背包,举一个例子就明白了. 如果要放n个苹果,可以将n个苹果分成几个2的次方1,2,3,4,m^2然后n可以由这些按照某种组合来组合. 于是就知道怎么优化了. #include <iostream> #include <cstring> #include <cstdio> using namespac…
51nod 1483 化学变换 题面 给出n个整数(n <= 1e5,每个数 <= 1e5),对每个数都可以进行多次操作,操作有两种:乘二/整除以二. 问最少经过多少次操作能使所有数相等. 题解 对于每个数,枚举它变成另外一个数(目标数)所需的最小步数,目标数的代价值 += 这个最小步数.这样最后输出所有目标数中代价值最小的即可. 注意,对于一个奇数,把它除以二之后再乘以二,得到的是一个新数. #include <cstdio> #include <cmath> #in…
1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mod 1000000007的结果. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 50000) 第2 - T + 1行:T个数A[i](A[i] <…
1086 背包问题 V2  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数).求背包能够容纳的最大价值.   Input 第1行,2个整数,N和W中间用空格隔开.N为物品的种类,W为背包的容量.(1 <= N <= 100,1 <=…
1596 搬货物 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  取消关注 现在有n个货物,第i个货物的重量是 2wi .每次搬的时候要求货物重量的总和是一个2的幂.问最少要搬几次能把所有的货物搬完. 样例解释: 1,1,2作为一组. 3,3作为一组. Input 单组测试数据. 第一行有一个整数n (1≤n≤10^6),表示有几个货物. 第二行有n个整数 w1,w2,...,wn,(0≤wi≤10^6). Outp…
传送门 题意 分析 只要从小到大二进制处理即可 我一直遍历了1->n,应该是0->1e6+1000 果然智障 trick 代码 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[1001001]; const int maxn=1e6+1000; int n,x; int main() { scanf("%d",&n)…
有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数).求背包能够容纳的最大价值. 我们可以转化成01背包来做,但是这样很慢. 所以我们可以二进制优化. 一个数a,我们可以按照二进制来分解为1 + 2 + 4 + 8 -- +2^n + 剩下的数 = a 剩下的数等于a - (1 + 2 + 4 + 8 -- +2^n ) 我们把a拆成这么多项…
集合统计类期望题目. 题目描述 在一片大海上有 \(n\) 个岛屿,规划建设 \(m\) 座桥,第i座桥的成本为 \(z_i\),但由于海怪的存在,第 \(i\) 座桥有 \(p_i\) 的概率不能建造. 求在让岛屿尽量联通的情况下,期望最小成本为多少. 尽量联通:在对每座桥确定能否建造的情况下,对于任意两个岛屿,如果存在一种建桥方案使得它们联通,那么它们必须联通. 输入输出格式 输入格式: 第一行:两个整数 \(n\) 和 \(m\)(\(n\) 为岛屿数量,\(m\) 为桥的数量),中间用空…
V3其实和dp关系不大,思想挂标题上了,丑陋的代码不想放了.…
现在有好多种砝码,他们的重量是 w0,w1,w2,...  每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组测试数据. 第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9). Output 如果能,输出YES,否则输出NO. Input示例 3 7 Output示例 YES 题解:如果让一些砝码表示m的话,只需要将m转化为w进制数,然后要求每一位不是0就是1,然而这里可以利用天…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的做法是从mid向右扫到r,统计出所有\([mid,i],mid\leq i \leq r\)的and和or值. 然后发现这些and和or值有很多相同的,把相同的压在一起并记录sum,再从mid-1扫到l并暴力从mid向右统计答案. 事实上因为\([mid,i],mid\leq i \leq r\)是…
首先,51nod的那道题就是最简单的尼姆博弈问题. 尼姆博弈主要就是判断奇异局势,现在我们就假设有三个石子堆,最简单的(0,n,n)就是一个奇异局势,因为无论先手怎么拿,后手总是可以在另一堆里拿走相同的石子数. 再看另外一个奇异局势(1,2,3): ①如果先手拿第一个石子堆,那么后手可以形成(0,2,2)的局势,先手必败. ②如果先手拿第二个石子堆的1个石子,那么后手可以形成(1,1,0)的局势,先手必败. ③如果先手拿第二个石子堆的2个石子,那么后手可以形成(1,0,1)的局势,先手必败. 后…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1684 题意: 新建一个位运算,求所有子集通过这个位运算后的答案的平方和是多少. 先想弱化版: 新建一个位运算,求所有子集通过这个位运算后的答案的和是多少. 枚举每一个二进制位,看有多少个子集能够使这一位为1 dp[i]表示前i个数中,能使枚举的这一位为1的方案数 根据第i个数选或者是不选转移 ans= Σ  2^j * 第j位的dp[n] 这里是平方和 设一个子集位运算…
[51Nod 1773] A国的贸易 题目描述 A国是一个神奇的国家. 这个国家有 2n 个城市,每个城市都有一个独一无二的编号 ,编号范围为0~2n-1. A国的神奇体现在,他们有着神奇的贸易规则. 当两个城市u,v的编号满足calc(u,v)=1的时候,这两个城市才可以进行贸易(即有一条边相连). 而calc(u,v)定义为u,v按位异或的结果的二进制表示中数字1的个数. ex:calc(1,2)=2 --> 01 xor 10 = 11 calc(100,101)=1 --> 0110,…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1596 思路: 模拟二进制的进位. 这题很坑啊...用c++会超时,用c就行了... #include<stdio.h> #include<string.h> ; int w[maxn]; int main() { //freopen("D:\\input.txt","r",stdin); int n; while(s…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1709 (我什么时候看到二进制贡献才能条件反射想到按位处理贡献呢……) 参考:https://www.cnblogs.com/hzoier/p/8593825.html 最朴素当然是LCA暴算. 但是更聪明的做法是考虑每个节点$u$,固定$lca$求贡献,能够$LCA(u,v)=lca$的点$v$的个数显然为$size[lca]-size[u$所在的以$lca$为根的子树…
https://www.51nod.com/tutorial/course.html#!courseId=11 题目大意: 有$N$种物品和一个容量为$W$的背包.第$i$种物品最多有$c[i]$件可用,每件体积是$w[i]$,价值是$v[i]$.求解将哪些物品装 入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 解题思路:采用二进制拆分的思想,将有限的背包划分为01背包和完全背包解决. 转移方程:$dp[i][j] = \max \{ dp[i - 1][v - k*w[i]] +…
51nod 1709 复杂度分析 考虑定义 $ F(x) $ 为 \(x\) 为根的子树所有点与 $ x $ 的深度差(其实就是 $ x $ 到每个子树内点的距离)的 1 的个数和. 注意,$ F(x) $ 的值不是答案,但是只需要一点树形dp的基础内容就可以变成要求的答案. 对于一个点 $ u $ , 考虑它的一个儿子 $ v $ , 我们此时已经计算出了 $ F( v ) $ 的值那么怎么统计 $ v $中所有点对于 $ u $ 的贡献呢?首先考虑 $ F(v) $ 的变化,由于当前的点 $…
有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...)     按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string)       按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsi…
1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log   #二进制日志的文件名 server_id=1  #必须指定server_id,这是MySQL 5.7.3以后的要求 binlog-do-db=yrld   #备份的数据库名,可以是多个 binlog-do-db=website binlog-do-db=yrldgold  完整内容:------------------------------------------------------…
在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDictionaryWriter类从XmlWriter类派生,它公开了一些静方法,可以直接创建基于文本.二进制和MTOM格式的XML写入对象.文本格式就不多说了,就是直接把XML内容写入文件,二进制和MTOM相似,都对文件内容进行压缩,说白了,是输出为纯字节形式.MTOM常用于读写SOAP消息. 我们可以做个…