自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(129)
  • 收藏
  • 关注

原创 补码的符号位为什么能参与运算(看这一篇就够了,绝对通俗易懂!!!)

前置知识补码的定义:所谓补码,英语里又叫two's complement(对2求补),这个2指的是计数系统的容量(模),就是计数系统所能表示的状态数。比如 "1位符号位 + 4位数值位",那么容量(模)就是因为 非负数是[0, - 1], 负数是[ -+1, 0), 然后还有一个 -0,一共就是个;或者“暂时抛弃符号位”这一说法,5位二进制数表示的数最多就是个因此,[x]补 = ( + x) % %x <=> 模x反码的...

2021-03-14 13:13:46 15512 37

原创 洛谷 P2574 XOR的艺术 【线段树】 (题目 + 代码 + 详细注释)

题目:Question:一段01序列,多次反转[l, r]区间内的数字,即(0 -> 1, 1 -> 0),然后询问某个区间内1的个数Analyse:显然是一道“区间修改,区间查询”的问题,因此我们可以用线段树来做。而这道题比较特殊,每个位置的数只有0或1,那么区间内部1的个数就是区间和(这个懂了就好写代码了);因此,这道题实际上就是求区间和Difficulty:反转区间时怎么记录Solution:我们可以用懒标记记录每个区间的反转次数。如果标记次...

2021-03-06 10:51:00 238 1

原创 百练 2811:熄灯问题【枚举】(题目分析 + 详细注释 + C++代码)

题目传送门题意:每个方格有一盏灯,有亮和灭两种状态然后每个方格处也有一个按钮,按下这个按钮,会导致 当前方格和其上下左右的方格的灯的状态转变,即 亮 -> 灭,灭-> 亮求按按钮的方式分析:题目中也说了,按按钮的顺序不影响最后的结果(这是显然的,不说也应该知道)可能的做法有:1. 每个按钮有按和不按两种情况,如果直接枚举的话,那就是O(2 ^ 30),显然吃不消2. 既然没办法枚举所有的按钮,那么就要想办法排除掉一些无用的情况 ...

2021-08-09 17:30:52 591 1

原创 POJ 2182 Lost Cows(三种解法:暴力 和 线段树 和 树状数组)

题意:有n头牛,每头牛有一个序号(范围是1-n)。现在知道每头牛前面比自己序号小的牛的数量。需要求出每头牛的序号分析:可以想到的是,从后往前遍历。对于第i头牛,如果它前面有k头牛比它的序号小,那么它的序号就是当前仅剩编号中的第(k + 1)大的数。暴力求法(类似约瑟夫环)那么本题的难点就变成了如果求出剩下的编号中第m大的数,因为从后往前遍历的过程中,每确定一头牛的编号,那么剩下的编号就要去掉一个值。这和约瑟夫环非常的类似(本题没有环),因此可以用

2021-08-07 12:04:32 442

原创 Acwing 1107 魔板

题目传送门分析:我们可以把每一种棋盘状态看作一个结点,因为一共就8位数,所以结点数是有限的。也就是说我们可以用这些结点构建一个无向图。又因为每次转换的“花费”是相同的,即花一次转换机会因此图上的边权也相等而题目的问题就可以转化为求边权相等的图上两个点的最短距离那么就很明显是bfs了代码:#include<bits/stdc++.h> using namespace std;#define fi first#define se second.

2021-07-27 18:33:54 229

原创 POJ 2971 抓住那头牛(bfs)

题意:农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点NN,牛位于点KK。农夫有两种移动方式:从XX移动到X−1X−1或X+1X+1,每次移动花费一分钟 从XX移动到2∗X2∗X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?分析:对于 [0, 1e5]中的每一个i,我们可以将其想象成一个结点。i 和 i-1,i + 1, 2 * i 分别有一条边,这样就能形成一个图。那么问题...

2021-07-26 17:00:03 392

原创 Codeforces Round #713 (Div. 3) F. Education

题目传送门题意:有n个职位,在不同的职位能赚不同的钱;职位越高,工资越高(至少相等);升职需要一定的钱(可以理解为手续费),且升职当天没有工资(消耗一天);如果要凑够总数为c的钱,至少需要多少天(工资是日薪)分析:有点像背包问题?或者像是 2 ^ n 的枚举?但都不是!!!首先,要明白一点:如果要升职,早升职比晚升职好,因为手续费都是要交的,早升职,就能更早地享受高工资,那么就能更快凑够c(贪心)其次,如果不升职,因为不能跳级,那么就一直以当前职位继续下去,就不

2021-07-22 21:55:32 96

原创 Codeforces Round #725 (Div. 3)

题目传送门A. Stone Game题意:一个数列,每次操作只能删除最左边和最右边的数把最大值和最小值都删去时的最少操作次数分析:假设两个数的下标为x1 和 x2 (x1 < x2),最大值可能是x1,也可能是x2,无所谓,因为只要能删掉这两个数就行,不关心顺序共三种情况:都从左边删;都从右边删;x1从左边删,x2从右边删因此,最后的答案就是三者取最小int main(){ int T; scanf("%d", &T); while(T--){ int

2021-07-20 17:55:03 116

原创 POJ 3723 Conscription (最小生成树)

题目链接题目大意:解题思路:本题最大干扰是男女配对,其实这个条件一点用都没有,不要想复杂了(想成了二分图,我一开始就是这么想的。。。。)题目要求招募n个女兵,m个男兵;但是一共就n个女兵,m个男兵,也就是说全都招募了解法很明显,让(10000 - di)求和最小,也就是边权di求和最大,就是“最大生成树“;那么就来实现一下最大生成树算法就行!最大生成树算法(其实就是最小生成树的变种)把表达式变形一下就是 10000 * (n + m) + (-d1 - d2 - d3 - d4 -

2021-07-04 20:24:40 211 3

原创 期末水水文

考试月,没时间发文章了,但是为了保持每月至少一篇的记录,故发次水文。。。。计组好难啊软工好难啊DL好难啊马原好难啊好难好难啊!!!!!学不完啦!!!!!!!!

2021-06-23 20:56:08 115

原创 Leetcode 1486. XOR Operation in an Array(数组异或操作) (题目 + 详解 + C++代码)

题目描述:Given an integer n and an integer start.Define an array nums where nums[i] = start + 2*i (0-indexed) and n == nums.length.Return the bitwise XOR of all elements of nums.Input: n = 5, start = 0Output: 8Explanation: Array nums is equal to[0, 2, 4

2021-05-07 10:37:59 206

原创 Colab使用方法,以及读取Google drive中的文件太慢的解决办法(亲测有效)

前言:使用云端硬盘和Colab得能科学上网啊,fq方法自己去摸索吧(偷笑回到正文!!!!一、文件上传到Google的云端硬盘上1、点击左上角的新建2、点击上传文件或者上传文件即可上传;上传会很慢...

2021-05-05 11:13:49 7247 18

原创 POJ 3255 Roadblocks (正反建图,两次dijkstra)

题目大意:解析:次短路其实就是最短路换掉某条边因此,我们可以先跑一次dijkstra,求出1-n的最短路。然后反向建图,再跑一次dijksta(起点为n),求出任意一点到n的最短路(关键步骤,得想明白为什么反向建图跑一次dijkstra得到的 是任意一点到n的最短路)再枚举每一条边(设端点为u和v),那么可以求出 1-u-v-n 这条路径的长度次短路就是上述所有路径中大于最短路的最短的那一条代码:#include<bits/std...

2021-04-01 20:29:47 236

转载 C++ 数组作为参数时只是复制了指针,并没有复制大小

本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定?先看下面的代码。#include <iostream>using namespace std;void testArrayArg(int a[]){ cout << endl; cout << "in func..." << endl; cout << "array addre

2021-03-31 22:12:10 235

原创 洛谷P4017 最大食物链计数(题目 + 代码 + 详解)

https://www.luogu.com.cn/problem/P4017#include<bits/stdc++.h> using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)typedef long long LL;typedef unsigned long long ULL; typedef pair<int, int>PII;typ..

2021-02-28 15:15:05 300

原创 洛谷 P1017 [NOIP2000 提高组] 进制转换 (负进制转换)

题目传送门题意: 要求把一个十进制数转成一个负进制数,如 -15(10)= 110001110001(-2)分析:要把x转成r进制(r < 0), 可知 x = k * r + m其实和正进制数类似,只不过,对负数取模得到的结果可能是负数,我们需要把其转换成正数,方法是:m < 0时,那么m一定是(-r, 0),m - r就一定大于0,因此上式等价于 x = (k + 1) * r + (m - r);这样余数就为正数了 m > 0时,这个正常写就行...

2021-01-21 22:09:27 217

原创 洛谷P1246 编码 (题目 + 详细注释 + 代码)

题目传送门题目描述编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数宇。字母表中共有26个字母{a,b,…,z},这些特殊的单词长度不超过6且字母按升序排列。把所有这样的单词放在一起,按字典顺序排列,一个单词的编码就对应着它在字典中的位置。例如:a→1 b→2 z→26 ab→27 ac→28你的任务就是对于所给的单词,求出它的编码。输入格式仅一行,被编码的单词。输出格式仅一行,对应的编码。如果单词不在字母表中,.

2021-01-21 20:38:59 676

原创 基数排序 C++ (正负数均可 + 详解)

Theory:​ 从低位到高位, 每次分两步:把当前位相同的值放在同一个桶里面,如个位数都是1的就都放到1号桶从[0, radix - 1]把每个桶里面的值按顺序收集起来然后循环执行上述步骤k次,其中k是所有数中最大的数位Attention:如果全是非负数,那么只需要开10个桶(对于十进制数);有负数时开20个, 因为 -45 % 10 = -5,把[-9, -1]映射到[1, 9],把[0, 9]映射到[10, 19] (即加上10)Code:int a[7] = {

2020-12-04 12:08:19 1022

原创 6-4 The Kth Largest X in BST (30point(s)) (两种方法)

文末有福利!!!!法一:(投机取巧法)题目的意思就是在一棵BST中找到一个数X,然后得到这个数是第几大的(千万不要理解成找第X个大的数了)然后我们就可以利用BST的特点来求解:中序遍历为有序序列那么问题就转换成了在有序序列中找一个数,这时候可以暴力枚举,可以二分,想咋滴咋滴,反正就是能做了Code:int a[1000], cnt; //a数组存储中序遍历的序列void inOrder(BinTree T){ //中序.

2020-11-27 18:09:43 1562

原创 8-1 二叉搜索树BST的元素删除、AVL的插入算法以及Set的底层实现 (《数据结构》第九章 查找 课后作业)

BST的元素删除//注意传引用,才能作用到树本身void delete(node* &root, int x){ if(!root){ //空树,则没找到 cout << "Not Found\n"; return; } //当前结点值大于x时,根据BST的性质,则去左子树上继续找 if(root->data > x) delete(root->left, x); else if(root->d

2020-11-25 20:48:53 223

原创 PAT甲级 A1066 Root of AVL Tree (25point(s))

题目:传送门An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 il..

2020-11-20 10:01:15 137

原创 反转单链表 (有头结点和无头结点两种情况)

//无头结点List Reverse( List L ){ if(!L || !(L->Next)) return L; //如果是空链表或者只有一个结点,那么就不用反转 List now = L, pre = NULL; //pre是当前结点的上一个,第一个结点的pre为NULL,这样反转后最后一个结点的Next就为NULL,刚刚好呀 while(now){ //遍历链表 List t.

2020-10-09 17:45:02 369

原创 数组去重 (STL + 两行代码搞定)

去重步骤如下:对数组排序 (数据存在 vector<int>a 中) 用STL封装好的函数 unique() 和 erase(); 其中unique()是把不重复的数都放到vector的前面,其他的都扔到后面去,并返回后面的第一个重复数的迭代器(如下图第箭头所指的地方),而erase()是把一个区间内的数都删掉 ​sort(a.begin(), a.end());a.erase(unique(a.begin(), a.end()), a.end());//经上述两个步骤后..

2020-10-01 16:32:47 899 1

原创 并查集 (全家桶板子)

前言:并查集是用来解决 “朋友的朋友也是朋友” 类的问题,其实写三个函数就能解决大部分题//判断任意两个元素是否属于同一个圈子 if(findfa(x)== findfa(y)) printf("Y\n"); else printf("N\n");//重点的三个函数(核心部分)int fa[N];void init(){ //初始化 for(int i = 0; i < N; i++) fa[i] = i;}int .

2020-09-26 14:34:41 125

原创 如何提高 cin/cout 的运行速度 (速度和简洁两全其美)

绪论:用过cin/cout的小伙伴们,估计就不想再用scanf/printf了吧! 因为cin/cout简洁啊,不用判断数据类型了,代码量又小,使用起来又方便! 然而真的是百利而无一弊吗? 有一个问题是:用cin/cout,对于使用者来说是很省事,但是对计算机来说就不太又好了,因为cin/cout的运行速度比 scanf/printf要慢很多(虽然我们是感觉不出来的);如果是做过算法竞赛的同学,就会明白“这点”差距有“多么大”,那么就没有两全其美的方法吗? 如果没有,那我写这篇文章不就是说废话了吗, 哈哈.

2020-09-19 21:28:31 2124 1

原创 高精度算法 (速用板子)

绪论: 对于加减乘除运算,但是有时候某个数的位数过大,超过了long long,就不能用某个变量存储了,这时候就得用数组存储数字的每一位,然后进行运算。 下面主要介绍四种高精度运算: 高精度 + 高精度 高精度 - 高精度 高精度 * 低精度 高精度 / 低精度首先是数据处理:输入:读入字符串,然后把每一位存储在数组中(本文用到STL中的vector) 注意:是逆序存储,因为加减乘运算都是从低位开始的,把数的低位放在数组的前面更方便运算,因为如...

2020-09-18 18:07:06 346

原创 离散数学:快速又准确地求解主合取范式和主析取范式 (配凑大法好)

例题:(p∧q)∨(┐p∧r), 求上式的主析取和主合取法一:相信大家都会的方法是——真值表法, 把真值表写出来后,把真值为1的项合取的结果就是主析取范式, 把真值为0的项析取的结果就是主合取范式。法二(重点):这里讲得是配凑法。配凑法能直接配出来主析取范式(主合取范式)的每一个最小项(最大项)步骤:把析取合取非换成 +、*、' => 原式 = pq + p'r 把原式化成 析取式(与或式) => 原式 = pq + p...

2020-08-15 18:36:22 19950 7

原创 离散数学n元变量的真值函数(或者真值表的种类数)有 2^(2^n)个 详解

前言:这个定理在离散数学书上的解释,我看不太懂!(可能是我太愚笨了),然后在网上查了一些资料,才慢慢地懂了这个定理的意思。本文主要写给和我一样对这个定理云里雾里的同学!本文会尽可能地解释地清晰,希望对大家能有帮助!题意:由n 元 变量能组成多少个真值函数,由于真值函数和真值表是一一对应的,所以也就是真值表的个数解:首先, n 个变量可以组成 2 ^ n 种组合方式,因为每个变量有 选 和 不选 两种选择,所以就是2 * 2 * 2 *....(n个) = 2 ^ n 其次,每一种组合,它...

2020-08-15 16:11:22 10546 19

原创 洛谷 P1658 购物(题目+ 代码 + 详细注释) 【贪心】

题目链接:https://www.luogu.com.cn/problem/P1658题目描述你就要去购物了,现在你手上有N种不同面值的硬币,每种硬币有无限多个。为了方便购物,你希望带尽量少的硬币,但要能组合出1到X之间的任意值。输入格式第一行两个数X、N,以下N个数,表示每种硬币的面值。【数据规模】对于30%的数据,满足N≤3,X≤20;对于100%的数据,满足N≤10,X≤1000.输出格式最少需要携带的硬币个数,如果无解输出-1.输入输出样例输入 #1.

2020-07-14 10:55:15 633

原创 洛谷 P1098字符串的展开 (题目 + 代码 + 详细注释)

题目链接:https://www.luogu.com.cn/problem/P1098题目描述在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678"。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:(1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了

2020-07-10 11:31:43 326

原创 洛谷P1072 Hankson 的趣味题 (题目 + 代码 + 详细注释)

题目链接:https://www.luogu.com.cn/problem/P1072题目描述Hanks 博士是 BT(Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson。现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数c_1c1​和c_2c2​的最大公约数和最小公倍数。现在 Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正...

2020-07-06 22:52:03 870

原创 洛谷 P1042 乒乓球 (题目+ 代码 + 详细注释 + 坑点分析)

题目链接:1042 乒乓球题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白1111分制和2121分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2.

2020-07-06 18:12:50 830

原创 洛谷P1087.FBI树 (题目 + 代码 + 详细注释)

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:T的根结点为R,其类型与串S的类型相同; 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。 现在给定一个长度为2^N的“01”串,请用上述构造方法

2020-07-06 17:24:56 468

原创 【模拟】洛谷P1190 接水问题 (题目 + 代码 + 详细注释)

学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。 现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n 编号,i 号同学的接水量为wi。接水开始时,1 到m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学j 完成其接水量要求wj 后,下一名排队等候接水的同学k马上接替j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第x 秒结束时完成接水,则k 同学第x+1 秒立刻开始接水。若当前接水人

2020-07-06 16:15:49 442

原创 PAT甲级 A1049 Counting Ones (30分) (题目 + 代码 + 详细注释)

The task is simple: given any positive integerN, you are supposed to count the total number of 1's in the decimal form of the integers from 1 toN. For example, givenNbeing 12, there are five 1's in 1, 10, 11, and 12.Input Specification:Each input f...

2020-07-06 14:57:34 819

原创 Zeal最新版下载 + Content rendering error解决办法(亲测有效)

Zeal是一款离线API文档浏览器,能够让开发者更加便捷地查阅API文档。如果你是一名程序员,那么你值得拥有!下面配上几张Zeal的照片:下载链接:(若链接失效,请及时链接本人!)链接:Zeal提取码:vvit下面说几点可能会遇到的问题:如果会科学 Surf The Internet,下载文档的速度会很快;否则,很龟速的 可能会遇到CSS3、HTML和Javascript下载后,显示不了内容,如以下提示 解决办法:以CSS为例,左上角Edit-&...

2020-06-11 22:44:31 3054 4

原创 PTA7-4 后缀式求值 (25分) (题目 + 代码 + 详细注释 + 坑点分析)

我们人类习惯于书写“中缀式”,如3 + 5 * 2,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是:3 5 2 * +现在,请对输入的后缀式进行求值。输入格式:在一行中输入一个后缀式,运算数和运算符之间用空格分隔,运算数长度不超过6位,运算符仅有+ - * /四种。输出格式:在一行中输出后缀式的值,保留一位小数。输入样例:...

2020-06-11 22:12:45 4209 2

原创 【堆排序 + 插入排序】PAT A1098 Insertion or Heap Sort (25分) (题目 + 代码 + 详细注释 + 测试点4分析)

题目如下:According to Wikipedia:Insertion sortiterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted .

2020-05-13 23:05:13 416

原创 Codeup 1919A 问题A:二叉排序树(附坑点分析)

问题 A: 二叉排序树时间限制:1 Sec内存限制:32 MB题目描述输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。输入输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一...

2020-05-06 22:54:00 226

原创 【贪心+优先队列】POJ-2431 Expedition (题目 + 代码 + 详细注释)

题目太长,就直接给个链接了:Expedition题意:一辆车要到某个地方去,每走一单位距离耗一单位油,中途有若干加油站,求加油的最小次数。思路:建一个优先队列,在还没到达目的地时,执行一下操作:把当前能到达的所有加油站放入这个队列(油量大的加油站优先级高),没油时,就把队首元素取出并加油;如果队列为空,即没地方加油了,那么就到达不了目的地了!代码及注释://#i...

2020-05-04 15:48:18 299

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除