
二进制
S atur
要变成萤火虫~
展开
-
H.Happy Number (进制转换/第n个特殊数)(2021牛客暑期多校训练营9 )
传送门题意:寻找第n个只包含 ‘2’ ‘3’ 和 ‘6’的数字。思路:有点类似与二进制,只不过这里是把 n 转换为三进制数 x ,再通过 x 转换为对应的数字。特别需要注意的是 x 中为 0 的位置 其实代表需要向前借一位,再将余下的数对应为相应的数字。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#def..原创 2021-08-15 10:00:11 · 284 阅读 · 0 评论 -
Codeforces B. Captain Flint and a Long Voyage (思维 / 二进制) (Round #660 Div.2)
传送门题意: 找到最小的n位十进制数,使得起每位数的二进制拼接在一起形成的长二进制串删除末尾n位数后剩下的数max。思路:这场比赛我当时没有参加,还一直口胡误导队友,啊啊啊!太菜了!要想剩下的数最大,那么就得要求每位数的二进制位数最高(就像二进制100绝对比11大),而不难发现0~9中只有8和9是4位的二进制数。要想剩下的数最大,不仅需要最高位,也需要低位来凑。所以只要不在后n位范围内的地方都可是9,而在后n位中不管是9还是8都会被去掉。但我们需要的是最小的n位十进制数,当然就选择最小的8啦原创 2020-08-09 00:21:40 · 158 阅读 · 0 评论 -
C - 璀璨光滑 (bfs & 排序贪心 & 二进制位运算) (牛客算法周周练15)
传送门题意: 有一张2n个点的无向图,这个图上每个点标上了0到2 ^ (n-1)之间不同的数字。记pi为第i个点的标号,那么u和v之间连边当且仅当pu与pv的二进制表示恰好有一位不同。现在告诉了你这张图,但是每个点的标号不见了,请找到一个字典序最小的标号方式,即先比较p1,如果相同的话比较p2,依次类推。思路:输出2 ^ n个不同的数——说明每个点的标号都能被找到,意味着这是张连通图。且已明文规定是找最小字典序的标号序,所有这样找下来的答案就是唯一且确定的(因为1号点的标号一定是0)。利用b转载 2020-07-16 22:16:02 · 189 阅读 · 0 评论 -
Codeforces F. Binary String Reconstruction (二进制串 / 构造) (Round #640 Div.4)
传送门题意: 对于一个二进制串,取其每个相邻的两个字符的子串并规定和统计其类型的数量。n0表示子串中’1’为0个的子串数量n1表示子串中’1’为1个的子串数量n2表示子串中’1’为2个的子串数量现给出n0,n1和n2,要求你构造一个满足三个数值的二进制串。思路:若n1为0,那么n0和n2必有一个为0;直接处理它就好若n1不为0,那么先处理n0,再接上n2,最后处理n1(注意中间有个"01"串,所以在处理前n1需要 - -)。代码实现:#include <cstdio>原创 2020-07-06 21:39:10 · 305 阅读 · 0 评论 -
Codeforces D. AND, OR and square sum (二进制 / 位运算) (Global Round 8)
传送门题意: 现有一个数组a,选两个不同下标的数一个赋值为二者的 ’ & ‘值,另一个赋值为二者的’ | '值。最后计算所以ai ^ 2的和ans,求ans的最大值。思路:1的个数不会变:例如3 和 5,011 & 101 = 001,而011 | 101 = 111;第一位的1,第二位的1,第三位的1的个数都没有变,只是在各个数之间移动(意味着所有数的和不会改变)。因为(a + b) ^ 2 >= a ^ 2 + b ^ 2,所以我们可以大胆处理直接得到答案让有限的1分原创 2020-06-21 13:53:31 · 252 阅读 · 0 评论 -
Codeforces E. Maximum Subsequence Value (二进制 / 思维) (Round #648 Div.2)
传送门题意: 在给定的序列中选择一个子序列,若子序列里有k个数,当至少有max(1,k-2)个数在二进制第i位上为1的时候,对答案就有2 ^ i贡献,试问最大的答案是多少。思路:若选定了k个数,那么假设有 >= k - 2个数包含二进制的第i位。那现在只选择3个数,若原来有 >= k - 2个数包含二进制的第i位,那么这三个数种也至少有一个数包含这一位二进制,因此(枚举找到特定的)三个数就能找到最优解。代码实现:#include<bits/stdc++.h>#de原创 2020-06-12 08:41:18 · 185 阅读 · 0 评论 -
Codeforces B. Subsequence Hate (二进制 / 思维) (Round #646 Div.2)
传送门题意: 求出最小删除字符数,以使二进制串s不含有"101"和"010"这样的子串。思路:可以看出,字符串不能出现’0’,'1’交替出现的情况。即只有"1111……",“0000……”,"1111……0000"和"0000……1111"这四种情况。所以用前缀和记录一下’0’和’1’的个数再计算求个min就行啦代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long lo原创 2020-06-06 11:52:13 · 340 阅读 · 0 评论 -
Codeforces C. Johnny and Another Rating Drop (二进制 / 贪心)(Round #647 Div.2)
传送门题意: 找到0 ~ n 的两两相邻数的二进制数的差异位数总和。思路: 不难看出其实每一位二进制数都有一定规律的。二进制第一位的贡献度为 n / (2 ^ 0)二进制第二位的贡献度为 n / (2 ^ 1)二进制第三位的贡献度为 n / (2 ^ 2)……如此遍历将每一位的贡献度加起来就是答案啦。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#原创 2020-06-05 13:29:00 · 294 阅读 · 0 评论 -
快速幂求逆元
添加链接描述原创 2020-02-11 20:55:53 · 372 阅读 · 0 评论 -
快速幂
添加链接描述题意:给定n组ai,bi,pi,对于每组数据,求出ai ^ bi mod pi的值。输入格式第一行包含整数n。接下来n行,每行包含三个整数ai,bi,pi。输出格式对于每组数据,输出一个结果,表示ai ^ bi mod pi的值。每个结果占一行。数据范围1≤n≤100000,1≤ai,bi,pi≤2∗1e9输入样例:23 2 54 3 9输出样例:41...原创 2020-02-11 18:36:08 · 213 阅读 · 0 评论 -
位运算:二进制中1的个数
常用操作:1.求n的第k位数字:n >> k & 12.返回n的最后一位1:lowbit(n) = n & ( - n )lowbit(x)是树状数组里面的常规操作在二进制中x是原码,-x是反码,-x+1是补码:题目链接:https://www.acwing.com/problem/content/803/给定一个长度为n的数列,请你求出数列中每个数...原创 2020-01-16 23:34:37 · 239 阅读 · 0 评论 -
Codeforces H. Binary Median (二进制 / 思维)(Round #644 Div3)
传送门题意: 在2^m 个长为m的二进制串(01串)中删除n个,输出剩下k个二进制串序列的中位数([k - 1] / 2 下取整)。思路:找到未删减时的中位数z,因为最多删除100个数,所以再把中位数左右110范围内的数加入答案a区间内。遍历需要删除的区间,因为二进制的字典序和十进制的排序一致,所以将其转换成十进制数x。若x < a[0],说明会在中位数左侧删除一个数,删除a[0];同理当x > a.end()的时候删除a.end();若需要删除的数在a区间内部a[0] <原创 2020-06-01 07:49:51 · 356 阅读 · 0 评论