08 2019 档案
摘要:题意: 有一个不保证凸的多边形,让你滚一圈,计算某点滚出的轨迹多长。 题解: 求出凸包后,以每个点为转轴,转轴到定点的距离为半径,用余弦定理计算圆心角,计算弧长。
阅读全文
摘要:题意: 给定一对用凯撒密码加密的明文和密文,再给你一个密文,让你解密出明文,保证有唯一解。 题解: 对凯撒密码的已知明文攻击,签到题。
阅读全文
摘要:本文我们将了解STM32与外部设备通过串口通信的方式。 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平。传输层,通信前要发RTS,CTS。每一层都有不同的协议所约束。在STM32中采用的USART就是其中之一。 USART模块由GPI
阅读全文
摘要:我们过去了解了用循环实现延时,或用系统滴答计时器实现延时,但这两种方法都有一种问题:会阻塞处理器的运行。下面我们学习一种不阻塞处理器运行其他事件的功能:时钟中断。 所谓中断,就是让处理器放下手头的事情,立刻去做一件事情,做完了再做原来的事情。比如说你在写作业,但是突然来了一个人找你说话,你就停下来跟
阅读全文
摘要:前面我们讲过,因为在STM32上没有系统时间的接口,因此无法调用sleep函数,在本文中,笔者将利用滴答计时器实现精准延时。 查阅技术手册,滴答计时器依赖于一个SysTick_Type类型寄存器,定义如下 typedef struct { vu32 CTRL; vu32 LOAD; vu32 VAL
阅读全文
摘要:按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作。 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入设备的工作状态也有四类,模拟输入,浮空输入,下拉输入和上拉输入。 模拟输入就是输入一个波形,浮空输入
阅读全文
摘要:将所有的函数都堆在main.c文件里不是好的选择,庞大的代码文件会是你维护的障碍,明智的做法是,一种功能封装到一个库文件里。 库文件就是你代码开始部分写的#include<xxxx.h>里面的xxxx.h,让我们打开stdio.h文件看一看里面具体有什么内容。 /* Copyright (c) 20
阅读全文
摘要:本文中,笔者将介绍使用嵌入式开发工具Keil uVision5,使用C语言,对微处理器STM32F103C8进行嵌入式开发。 开发使用C语言,首先需要新建一个C语言文件,将其设为主函数的入口,因此,将此文件命名为main.c 配置好软硬件依赖环境后,在此文件中键入如下内容,尝试编译,如果能够编译成功
阅读全文
摘要:题意: 紧密排列的方块因为摩擦力一个一个稳定地挤在一起,但当一个方块的四个邻居中,上下两个至少空缺一个,左右两个至少空缺一个,则这个方块也将掉落。 每次锤掉一个方块,求多少个方块受牵连落下。 题解: 可能掉落的方块总在刚刚掉落的方块上下左右四个方向出现,暴力bfs的话一个方块最多被访问4次,此复杂度
阅读全文
摘要:题意: 有许多物品,每个物品有一定概率让女朋友开心。你想让女朋友开心且只开心一次,让你挑一些物品,使得这个只开心一次的概率最大,求最大概率。 题解: 设物品i让女朋友开心的概率为 若你挑选了1-k共k个物品,则可记女朋友一次都开心不了的概率$w_0=\prod _{i=1}^k (1-p_
阅读全文
摘要:题意: 有一些1毛,2毛,5毛,1块的钢镚,还有一些价格不同的商品,现在要求你带一些钢镚,以保证这些商品中任选一件都能正好用这些钢镚付账,问最少带多少钢镚。 题解: 对于最优解,1毛的钢镚最多带1个,带两个就还不如带一个2毛的,同理2毛的最多带四个,5毛的最多带1个,一块的没有限制。 因此,预处理出
阅读全文
摘要:题意: 在一块长方形蛋糕上切若干刀,每一刀都是从长方形某条边开始,垂直于这条边,但不切到对边,求把长方形切成了多少块。 题解: 块数=交点数+1 因为对于每个交点,唯一且不重复地对应着一块蛋糕。 就是产生这个交点的相互垂直的两刀,以及这两刀分别上次经过的刀痕或边缘,这四条边确定的长方形。 则问题转化
阅读全文
摘要:题意: 给一个小写字母组成的字符串,每回合轮到某人时,此人可以选择让某位+1(如果是z则变回a),或者直接结束游戏。 先手希望游戏结束时字符串字典序尽量小,后手希望游戏结束时字符串字典序尽量大,求游戏结束时的字符串。 题解: 定理0:先手只能操作z 证明:如果先手操作非z元素,后手直接结束游戏,对于
阅读全文
摘要:字符串hash唯一用途是快速判断两字符串是否相等,但存在极小概率假阳性(本来不相等,但算法返回相等)。 根本思想是把一个字符串转换为一个整数,要求相同的字符串,对应的这个整数相同,不同的字符串,对应的这个整数不同。
阅读全文
摘要:题意: 给你一个“斐波那契”字符串数列,第n项由第n-1项和第n-2项拼接而成,输出某项的某位及其后10位。 题解: 递归求解即可。
阅读全文
摘要:题意: 给你一个方阵,再在方阵上给定一些点,按照希尔伯特曲线经过的先后顺序为这些点排序 题解: 定义好比较函数后直接调用排序算法即可。 希尔伯特曲线本来就是用于二维到一维的映射的,因此我们可以考虑对于每一个点预处理出它是希尔伯特曲线上第几个经过的,然后排序。 可以看出,假设在方阵的中心设立一个原点,
阅读全文
摘要:题意: 韩信有若干个兵,给定你若干个模数和余数,再给你一个1e18以内的范围限制,求解同余方程组,如果无解,输出“他一定在撒谎”,如果最小解超出范围限制,输出“他可能在撒谎”,否则输出最小解 注意:不保证模数互质,也不保证“他可能在撒谎”的情况答案不爆long long 题解: 因为不保证模数互质,
阅读全文
摘要:题意: 给出一个无向图,表示一种有机物质的结构式,问你这个有机物质是列表中的哪个。 题解: 判断图同构需要枚举全排列以对应点,但是此题中几乎只需要将点度数排序后一个一个比较,对于甲基位置再加个特判即可。
阅读全文
摘要:题意: 给定一个稀疏矩阵,里面有若干个气球,让你横着开三枪,竖着开三枪,问最多能打爆多少气球,要求相同方向,相邻两枪必须间隔r。 题解: 横向记录每列有多少个气球,分别在哪行上。 然后把这个数据改造成以此点为左端点,此列,以及此行右r列,以及右2r列的信息。 纵向记录每行有多少个气球。 然后将此数据
阅读全文
摘要:题意: 平面上有几个宽度相同的矩形区域被涂黑了,让你找到一条横线横截若干个矩形,把这些黑色部分抠下来一部分使得它们以这条横线为对称轴,求能抠下来的最大面积。 题解: 在随着对称轴上移的过程中,必然有一部分矩形有效面积在增加,一部分有效面积在减少,一部分有效面积不变。 单个矩形状态发生变化时,仅当对称
阅读全文
摘要:众所周知,c++的STL中提供了三个二分查找函数,binary_search(),lower_bound(),upper_bound(),功能分别是找某值是否在数组中出现,找到数组中第一个大于等于某值的元素,找到数组中第一个大于某值的元素。 这三个函数使用十分灵活,可以通过自定义结构体,比较函数,重
阅读全文
摘要:今天拍脑袋想出来的,不用ceil函数,不用浮点运算,不用取模,兼顾运行常数和代码量的向上取整除方法 在保证a,b>0时 ceil(a/b)=(a-1)/b+1; (完)
阅读全文
摘要:题意: 一开始有n人互不认识,每回合有两个人认识,认识具有传递性,也就是相互认识的人组成小团体。现在问你每个回合,挑选四个人,这四个人互不认识,有多少种挑选方法。 题解: 认识不认识用并查集维护即可,重点在于如何统计挑选方法。 每个回合两个人互相认识,排除两个人本就在一个小团体中的情况,实际上就是两
阅读全文
摘要:题意: 给你32个物品,给定一个容积,让你恰好把这个背包装满,求出装满的方案 题解: 暴力计算的话,复杂度 肯定会炸,考虑一种类似bsgs的算法,先用 的时间遍历前一半物品的所有子集,将所得结果存进map里,再遍历后一半物品的子集,每得到一个解,在map里查询有没有相加正
阅读全文
摘要:题意: 有若干个班,每个班有些人要喝奶茶,也提供一些奶茶,一人喝一杯,但是自己班的人不能喝自己班的奶茶,求最多能有多少人喝上奶茶。 题解: 典型的二分图匹配问题,学生在左,奶茶在右,学生和非自己班的奶茶连边。 因为班级数1e6,每个班级有1e9个奶茶或学生,直接按照上述建边跑匈牙利算法会T 考虑霍尔
阅读全文
摘要:题意: CCPC前10%能得金牌,给定队伍解题数和罚时,问你有没有一个队伍如果向上取整就金了,四舍五入就银了。 题解: 排序后按题意求解即可。
阅读全文
摘要:题意: 对于某数k,若数字d在1-k中出现次数恰好为k,则称k为好数。 给定d,x,求x以内,对于d而言最大的好数。k范围1e18. 题解: 打表二分即可。 但是,1e18的表是没法打出来的,只能在oeis.org上查出来 下面补充关于此题的一个定理证明。 好数不会超过1e11 证明:记f(d,k)
阅读全文
摘要:题意: 给定两个矩形,输出这两个矩形把平面分成了多少块。 题解: 本来是道计算几何的大讨论,被我生生写成了bfs。 离散化边,注意不重合的边中间要空出来一格,四周也要空出来一圈,然后暴力bfs计算一共有几块即可。 不这么暴力的方法倒也不是没有,观察下图,点与长方形的关系存在如下25种,那么两点确定一
阅读全文
摘要:题意: 有n道题,这n道题共m分,要求你至少做出k道才能及格,你可以自由安排复习时间,但是只有某道题复习时间严格大于题目分配的分值时这道题才能够被做出来,求最少的,能够保证及格的复习时间。复习时间和分数都是整数。 题解: 为什么给这道题一个博弈的标签呢?因为这道题其实是这样一个博弈过程: 第一回合,
阅读全文
摘要:题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r]-dp[l] 那么如何算出dp数组呢?首先dp[1]=0,利用期望方程正推 假设i点,成功率为p,失
阅读全文
摘要:题意: 对于一个序列,把可以把连着三个相同的字母拿走,问最多拿走多少组。 题解: 直接模拟栈,三个栈顶元素相同则答案+1,并弹出栈
阅读全文
摘要:题意: 构造出一个由1和-1组成的 的矩阵,使得矩阵任意两列内积为0 题解: 数学知识,沃尔什矩阵。沃尔什矩阵的特性被CDMA(码分多址)采用,使得编码成为无线信号的频段和振幅之外的第三维,提高了无线信道利用率。 构造沃尔什矩阵只需倍增构造,以第i个矩阵的第k行重复两遍,作为第i+1
阅读全文
摘要:题意: 给定一个序列,问你子区间中不同数字数量,在所有子区间中之和为多少。 题解: 统计每个数字在多少个区间中出现即可。对于每个数字,直接枚举左右端点。 注意去重,因此要记录每个数字上一次出现在哪里,在下一次出现时,从该数字上一次出现为止之后开始枚举左端点。
阅读全文
摘要:题意: 有一个树林,树林中不同种类的树有不同的数量,高度,砍伐它们的价格。现在要求砍掉一些树,使得高度最高的树占剩下的树的总数的一半以上,求最小花费。 题解: 用线段树维护不同种类树的信息,叶子节点从左到右存储单棵砍伐花费最小的树,从高度由高到低枚举树的种类,每次记这种树为留下的最高的树,每次将此种
阅读全文
摘要:题意: 给定一个矩阵,矩阵上有若干点,每个点有正或负的权值,找一个方框框住一些点使得方框中点权值最大。 题解: 离散化横纵坐标,容易将这个问题转化为在矩阵上求最大和子矩阵的问题。 普通的n*n的矩阵的子矩阵最大和正解为 ,枚举上下端点后dp 然而此题是一个稀疏矩阵,n*n矩阵中只有O(
阅读全文
摘要:题意: 设f(n,m)为比n大的第m个和n互质的数,给定一个k=(f(n,m)-n)xor n和m,求最小的n 题解: 对于给定的m而言,一个k周围合法的n分布的很密,因此在k的邻域暴力搜索即可。
阅读全文
摘要:题意: 给你一个小根堆,从根开始拿,拿走子节点被拿完后才可以拿走父节点,两个人依次拿,谁拿的节点总和大谁获胜,问你谁有必胜策略。 题解: 小根堆中,每个点的权值总是不小于父亲节点的权值。所以无论怎么取,先拿走的数一定 不小于后面拿走的数。 此时双方的最优策略就是:贪心选择能取的数字之中最大的数。
阅读全文
摘要:可持久化线段树,别名主席树。 在我看来这个数据结构绝妙之处在于它把可持久化的概念用于解决区间查询的问题。 一般主席树用于解决区间第k大的问题。 我们建立一棵权值线段树,权值线段树就是线段树上第i个叶子节点储存i出现了多少次(类似于桶排序) 假想,一个数列第i个元素a[i]=p,是在第i个时间节点插入
阅读全文
摘要:题意: 给你两个序列a,b,序列c的某位是由序列a,b的此位异或得来,让你重排序列ab,找出字典序最小的序列c。 题解: 如果能找到a,b序列中完全一样的值当然最好,要是找不到,那也尽量让低位不一样。 因此,将两个序列中元素的二进制视作字符串,建字典树。 在两棵字典树上,贪心地找让当前位一样的。 每
阅读全文
摘要:这个板子能够解决任何线性递推式,只要你确定某个数列的某项只与前几项线性相关,那么把它前若干项丢进去,这个板子就能给你返回你要求的某项的值。 原理???(待补充)
阅读全文
摘要:题意: 给你一个C,再给你n组a,b,让你求x取什么值的时候, ,要求求出解的个数,并用最简分数从小到大表示,如果有无穷多解,输出-1. 题解: 其实这些方程就是在平面上的一组曲线,都是V形的,最低点都在x轴上,求出所有的零点,以这个零点从
阅读全文
摘要:题意: 给你一个暴力匹配字符串公共前缀后缀的程序,为你对于某个字符串,暴力匹配的次数是多少。 题解: 使用扩展kmp构造extend数组,在扩展kmp中,设原串S和模式串T。 extend[i]表示T与S[i,n-1]的最长公共前缀。 在本题中,只需要将S,T均设为题目中输入的字符串即可,这样,ex
阅读全文
摘要:题意: 给你n个数,求如下限制条件下的排列数:1,第一位必须是x,2,最后一位必须是y,3,相邻两位之差小于等于2 题解: 如果x<y,那么考虑把整个数列翻转过来,减少讨论分支。 设dp[n]为限制1和n在两边,相邻的数之差小于等于2的排列方案。 dp[0]=1 dp[1]=1 dp[2]=2 dp
阅读全文
摘要:题意: 定义一个排列的差分为后一项减前一项之差构成的数列,求对于n个数的排列,差分的字典序第k小的那个,n<=20,k<=1e4。 题解: 暴力打表找一遍规律,会发现,对于n个数的排列,如果想找到差分的字典序第k小的,如果k<=(n-1)!,那么对应的那个排列就是把第一位赋值为n,后面的是1~n-1
阅读全文
摘要:主要参考资料:3b1b的视频快速傅里叶变换(FFT)——有史以来最巧妙的算法?_哔哩哔哩_bilibili在此一并感谢字幕制作者 FFT只有一个功能:快速计算卷积,它能把朴素卷积的 时间复杂度降低到 。 卷积: 卷积就是把两个离散序列的每一位两两相乘的过程,多项式的乘
阅读全文
摘要:题意: 有一堆日期,这些日期都是星期五,但是数字被映射成了字母A~J,现在让你求逆映射,如果存在多种答案,输出字典序最小的那个。 题解: 用蔡勒公式解决关于星期几的问题。 对于映射,可以用笔者刚刚学会的神器,next_permutation(),直接按照字典序生成排列数作为映射,一旦找到解,就输出,
阅读全文
摘要:题意: 有个家伙装东西,他的策略是贪心,每次装进去这个盒子能装下的最大的东西,直到把这个盒子装满,再去装下一个盒子。 给出盒子的数量k和一些东西的重量,问你最小需要多大的盒子才能以这种贪心策略装下。 题解: 如果某个解可行,比它大的值未必可行,比如有15个物品,5个39,5个60,5个100,5个盒
阅读全文
摘要:题意: 给定点数,构造自补图,要求输出邻接矩阵,和原图与补图的同构映射。 题解: 只有点数为4k和4k+1的情况才能构造自补图,因为只有这些情况下边数才为偶数。 一种构造方式是,邻接矩阵和同构映射增量构造,每次加四个边xyzw,x和w连接原来的所有边,yz不连,同构映射是交换xy,zw 参考:www
阅读全文
摘要:题意: 有n个技能,一开始都是0级,第i个技能从j-1级升到j级,花费 ,但是花费不一定是正的 所有的技能升到j级时,奖励 但是奖励也不一定是正的 题解: 用sum[i][j]储存-c[i][j]的前缀和,即技能i升到j级后总共的收益。 再用w[j]储存f[j]的前缀和,代表
阅读全文
摘要:题意: 给你一个二进制表示的IPv6地址,让你把它转换成8组4位的16进制,用冒号分组的表示法。单组的前导0可以省略,连续多组为0的可以用两个冒号替换,但是只允许替换一次。把这个地址通过这几种省略方式,长度缩到最短,然后输出字典序最小的。 题解: 计算出八组四位16进制数的值,找出连续的0,用冒号替
阅读全文
摘要:题意: 给你一个字符串,代表一个垃圾都有哪些物质组成,再给你一个字符串,代表a-z代表的物质分别是有害物质,干物质还是湿物质,根据题目的定义,回答是什么垃圾。 题解: 根据题意模拟即可。
阅读全文
摘要:进入正题前,先介绍一个计算排列的超好用的工具: next_permutation()和prev_permutation() 这两个函数定义在algorithm库中 参数和sort类似,传入三个参数,数组首位,数组末位的后一个,以及比较函数,当比较函数省略时,默认为less 功能是生成当前这个数组里的
阅读全文
摘要:题意: 给定一个多边形,这个多边形的点都在格点上,问你这个多边形里面包含了几个格点。 题解: 对于格点多边形有一个非常有趣的定理: 多边形的面积S,内部的格点数a和边界上的格点数b,满足如下结论: 2S=2a+b-2 证明不难,对于格点长方形显然成立,对于高度为1的直角三角形也显然成立,那么我们想象
阅读全文
摘要:当模数为素数时可以用费马小定理求逆元。 模数为合数时,费马小定理大部分情况下失效,此时,只有与模数互质的数才有逆元(满足费马小定理的合数叫伪素数,讨论这个问题就需要新开一个博客了)。 (对于一个数n,所有小于它且与它互质的数组成一个模n乘法群) gcd是最大公约数,扩展gcd则是在一对数x,y的gc
阅读全文
摘要:将一些计算几何常用的板整理一波 tips: 点与凸包的关系,计算凸包每条边与点的叉乘,如果出现0,则在凸包边上,出现两个0,则在凸包顶点上,正负性均相同,则在凸包内,否则在凸包外。 线段与凸包的关系,是两个点与凸包的关系的笛卡尔积。 直线与凸包的关系,可求凸包上每点与直线叉乘的正负性。 两线段的关系
阅读全文
摘要:题意: 给你长度最长为1000的字符串,这个字符串中最多有10种字母,每次给你两种字母,输出这两种字母在字符串中的相对位置,问你这个字符串原本是什么样子,如果不存在则输出-1 题解: 把整个字符串看作集合,每一个字符看作一个集合中的元素,字符串的前后关系看作偏序关系,作出这个集合的哈斯图,在哈斯图上
阅读全文
摘要:题意: 给定两个由数字组成的序列s,t,找出s所有数值大于t的子序列。注意不是字典序大。 题解: 首先特判s比t短或一样长的情况。 当s比t长时,直接用组合数计算s不以0开头的,长度大于t的所有子序列数量。 然后再去看s的和t一样长的子序列。 就是在找s和t的公共子序列,并且一旦某一位s比t大了,就
阅读全文
摘要:题意: 给定 ,求 n最大有1e6位 题解: 矩阵快速幂。 巨大的n并不是障碍,写一个十进制的矩阵快速幂就行了。 $ \begin{bmatrix}x_n \ x_{n-1} \end{b
阅读全文
摘要:题意: 给定一个n,输出一个数,要求这个数所有位之和整除n,并且这个数也整除n,并且位数不许多于1e4 题解: 把这个数n输出n遍。
阅读全文
摘要:题意: 给你重量分别为1到n的n个石头,让你分成重量相等,数量也相等的k组,保证k是n的约数。问你能不能分配,如果能,输出具体的分配方案。 题解: 首先,如果1到n之和不能整除k,那么一定不能如题意分配。 否则一定能。 设m=n/k。m是每组分到的石头块数。我们把n块石头排成这样m*k的矩阵,假设1
阅读全文