
牛客网&LuoGu练习题
牛客网各高校机试真题
Ordinary_yfz
知乎个人主页zhihu.com/people/zyf-98-4,现在涉及CV,transfer learning,unsupervised,GAN,REID,OOL很多研究方向,会经常写一些综述/论文阅读笔记。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LuoGu P1073 最优贸易【双向SPFA|思维】
题目链接很有意思的一道题,首先我们要明确题目要求的是什么东西,因为==贸易最多进行一次,==那么实际上是让我们找到一个点vvv,在起点到这个点的路径上以一个价格minp[v]minp[v]minp[v]买入,然后在该点到终点的路径上以价格maxp[v]maxp[v]maxp[v]的价格卖出,使得maxp[v]−minp[v]maxp[v]-minp[v]maxp[v]−minp[v]全局最大,如何实现这个功能呢?求从起点开始到某个点的最低买入价格:直接上spfa,if (min(minp[u],转载 2020-07-29 07:59:57 · 212 阅读 · 0 评论 -
LuoGu P1040 加分二叉树【虚伪的区间DP】
题目链接自己还是有点害怕树形DP的问题,其是这道题完全是一道区间DP,因为给了中序遍历,所以我们只需要不断的确定在某个区间里选择哪个作为根,然后递归的确定他的左子树选择哪个作为根,右子树选择哪个作为根即可,但是这样自顶向下进行递归肯定会超时,所以我们采取自底向上的区间DP策略:#define inf 0x3f3f3f3f#define ll long long#define vec vector<int>#define P pair<int,int>#define MA转载 2020-07-28 18:44:48 · 225 阅读 · 0 评论 -
LuoGu P1037 产生数【DFS|大数乘法】
题目链接这题一开始陷入了一个死区,我们可以使用简单的bfs来对输入的字符串进行遍历,一位一位的进行修改,用map来防止重复状态计数,那么我们最大可能有多少结果呢?这是这道题的重点,下列算法TLE了#define inf 0x3f3f3f3f#define ll long long#define vec vector<int>#define P pair<int,int>#define MAX 105string s; int k, a, b;vec rs[MAX原创 2020-07-28 11:51:04 · 257 阅读 · 0 评论 -
LuoGu P1179 数字统计【数位DP】
题目链接这道题的数据范围要暴力很容易,但是如果数据范围变大,比如10^100那么数位dp无疑是最好的,简单的复习一下数位DP。数位DP讲解#define inf 0x3f3f3f3f#define ll long long#define vec vector<int>//#define P pair<int,string>#define MAX 105int L, R, dp[10][10];//dp[i][j]:i位数,最高位为j时有多少2int cal(st原创 2020-07-28 10:20:28 · 243 阅读 · 0 评论 -
Luogu P1052 过河【DP|简单缩点无数论】
题目链接思路分析#include<cstdio>#include<cstring>#include<algorithm>int f[10000002];int a[102];int main(){ int l, s, t, m; scanf("%d%d%d%d", &l, &s, &t, &m); for (int i = 1; i <= m; i++) scanf("%d", &a[i]);转载 2020-07-27 12:09:36 · 224 阅读 · 0 评论 -
LuoGu P1021 邮票面值设计【DFS|DP|剪枝】
题目链接一道很有意思的搜索题,包含了背包、剪枝优化多种工具。写完还是收获蛮大的确定解题方法首先数据范围很小,搜索是可以用的,那么如果我们有KKK种邮票,我们要确定每种邮票取多少时满足题目中需要的条件,因此对每种邮票的取值进行遍历,如果我们确定了KKK种邮票的取值,那么我们将其视为一个背包问题,很容易求出他能凑出的所有价格,然后找到连续的价格。难点:确定每种邮票的取值范围我们用p[i]p[i]p[i]表示第iii种邮票的取值比较简单的思想我也没想出来 :第一个邮票一定是1,否则1都无法进行拼原创 2020-07-21 23:50:23 · 303 阅读 · 0 评论 -
LuoGu P1020 导弹拦截【O(nlog n)求解LCS问题&一个段最少分为多少下降序列】
贪心+二分允许我啰嗦一下写这篇题解的原因(这里嫌烦可以跳过 看一下嘛QAQ):由于我太弱在看题解中dalao们的思路和代码时没有懂虽然可能有同思路的 但是我当时看的时候没看懂所以想写一篇通俗易懂的题解帮助像我一样看不懂dalao题解的同学理解一下我是借鉴了一篇个人感觉很易懂的博客+直接应用了Dilworth定理才A了的没有Dilworth定理的证明是因为我不会证 想知道的直接问度娘好了(有人跟我说前提要会cdq分治 可是我太弱并不会 有空去看看)这是那篇博客:https://blog.c.原创 2020-07-20 23:35:20 · 334 阅读 · 0 评论 -
LuoGu P1026 统计单词个数【区间DP|枚举】
最近做了不少区间DP的问题,他们都有一个共同的特征:比如给出一条直线上的n个坐标表示村庄的位置,然后要在上面建p个邮局,村民优先选择去近的邮局,问所有村庄去邮局的最小距离和是多少,或者将N位数分割成K个因子相乘,求最大乘积,对这些问题,他们都可以归纳为将给定的N个元素分割成K分,求最小/最大,那么我们可以使用如下的dp思想:将给定的i个元素分割成j份,那么相当于我们找一个break point k, 将前k个元素分成j-1份,然后最后 k+1-i个元素单独为一份,遍历每一个可能的k点,使得结果最大即可。.原创 2020-07-20 15:30:55 · 244 阅读 · 0 评论 -
LuoGu P1005 矩阵取数游戏
题目链接一道挺有意思的区间DP,写了一个下午,自己对DP的掌握确实还是太low了,其实想法很简单,可以发现每行怎么取并不会有什么影响,只要算出每行的最大取法,然后加起来就可以了。故转移方程为f[i][j]=max(2f[i+1][j]+2a[i],2f[i][j−1]+2a[j])f[i][j]=max(2f[i+1][j]+2a[i],2f[i][j-1]+2a[j])f[i][j]=max(2f[i+1][j]+2a[i],2f[i][j−1]+2a[j])这里记录一下自己的误区,因为题目要求转载 2020-07-16 22:45:40 · 281 阅读 · 0 评论 -
LuoGu P1017 进制转换【对负进制的理解与转换】
题目链接思路分析这题和正的进制转换一样,短除就可以,但是两个负数相%可能会得负数,负数除法可能也和我们要的结果不一样如:我们想要:-3/-2=2 -3%-2=1(余数必须为正)但系统:-3/-2=1-3%-2=-1(显然系统负数相模可能会得负)这一题理解很重要 你要知道负进制转换的工作原理才行负进制和正进制其实没多大差别只不过可能在某个数位上出现负数你要做的就是从上一位借1来没错 就和减法差不多int n, r;int main() { cin转载 2020-07-16 11:05:04 · 256 阅读 · 0 评论 -
北京邮电大学2018年机试题-最长平衡串
题目描述给定只含01的字符串,找出最长平衡子串的长度(平衡串:包含0和1的个数相同),串长最大10^6输入一个字符串,只包含01,长度不超过1000000输出一行一个整数,最长的0与1的个数相等的子串的长度。2018北邮的压轴题,想了蛮久的,个人认为主要的点在于,我们可以将0换成-1,然后求前缀和数组dp,这样当dp[i]==dp[j]dp[i]==dp[j]dp[i]==dp[j]的时候,dp[i+1]−dp[j]dp[i+1]-dp[j]dp[i+1]−dp[j]这个区域内肯定是一个平衡子原创 2020-05-26 21:30:24 · 760 阅读 · 0 评论 -
错排问题-C++实现
错排问题是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为Dn。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题。最早研究错排问题的是尼古拉·伯努利和欧拉,因此历史上也称为伯努利-欧拉的装错信封的问题。这个问题有许多具体的版本,如在写信时将n封信装到n个不同的信封里,有多少种全部装错信封的情况?又比如四人各写一张贺年卡互相赠送,有多少种赠送方法?自己写的贺年卡不能送给自己,所以也是典型的错排.转载 2020-05-26 13:08:44 · 2949 阅读 · 1 评论 -
生化武器2【搜索】
In the warm-up, Gogo has used the mysterious “Pidun Shu”, and he found it very powerful. So he decides to perform it to his good friend SJ alone. Gogo performs it in a small room. He disappears suddenly and left the “chemical weapon”, which diffuses to up,原创 2020-05-15 17:44:28 · 364 阅读 · 0 评论 -
邮票问题详细题解【简单dp】
已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:6 = 3 + 37 = 3 + 3 + 18 = 3 + 3 + 1 + 19 = 3 + 3 + 310 = 3 + 3 + 3 + 111 = 3 + 3 + 3 + 1 + 112 = 3 +原创 2020-05-14 23:25:31 · 2277 阅读 · 0 评论 -
Hanoi塔问题【递归】
(n阶Hanoi塔问题)假设有三个分别命名为A、B、C的塔座,在塔座A上插有n(n<20)个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将A轴上的n个圆盘移至塔座C上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则: 1)每次只能移动一个圆盘; 2)圆盘可以插在A、B、C中的任一塔座上; 3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 请通过编程来打印出移动的步骤.Hanoi问题绝对是一个理解递归的好题,对一个将N个圆盘从A移动到C的问题,我们可以将它分解成三步将其上的N原创 2020-05-12 14:16:33 · 720 阅读 · 0 评论 -
文件压缩【字符串】
提高文件的压缩率一直是人们追求的目标。近几年有人提出了这样一种算法,它虽然只是单纯地对文件进行重排,本身并不压缩文件,但是经这种算法调整后的文件在大多数情况下都能获得比原来更大的压缩率。 该算法具体如下:对一个长度为n的字符串S,首先根据它构造n个字符串,其中第i个字符串由将S的前i-1个字符置于末尾得到。然后把这n个字符串按照首字符从小到大排序,如果两个字符串的首字符相等,则按照它们在S中的位置从小到大排序。排序后的字符串的尾字符可以组成一个新的字符串S’,它的长度也是n,并且包含了S中的每一个字符。最后转载 2020-05-11 20:03:29 · 1099 阅读 · 0 评论 -
K上升段 解题思维详述
对于自然数1…n的一个排列A[1…N] 可以划分为若干个单调递增序列。每个单调递增序列由连续元素A[st…ed]组成,且满足以下条件: 1<=st,ed<=n; A[i] A[ed+1]; 例如:排列1 2 4 5 6 3 9 10 7 8 可划分为3个单调递增序列 1 2 3 4 5 6;3 9 10;7 8;所以我们称这是一个3上升段序列 。 现在给定n和k , 求出n的全排列中的,k上升段序列的个数。挺好一道题,这道题基本的思路很容易想出来,暴力枚举每一个排列数,然后计算他是原创 2020-05-11 15:38:57 · 641 阅读 · 0 评论 -
N诺轰炸,poj 1118 Lining Up【共线问题/枚举】
“我该怎么办?”飞行员klux向你求助。 事实上,klux面对的是一个很简单的问题,但是他实在太菜了。 klux要想轰炸某个区域内的一些地方,它们是位于平面上的一些点,但是(显然地)klux遇到了抵抗,所以klux只能飞一次,而且由于飞机比较破,一点起飞就只能沿直线飞行,无法转弯。现在他想一次轰炸最多的地方。 不限定起飞地点这道题,我们显然需要知道二维空间内所有直线上的点的数目,取其中最大的,但是直线是连续的,所以这也算是离散化吧,我们取任意两个点来组成一条直线,然后依次判断每个点是否在这个直线上。判断原创 2020-05-11 12:32:27 · 370 阅读 · 0 评论 -
【题解】垃圾陷阱【记忆化搜索/爆搜+剪枝】
卡门——农夫约翰极其珍视的一条Holsteins奶牛——已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为$ D (2 <=D <= 100)$英尺。卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了。另外,卡门可以通过吃一些垃圾来维持自己的生命。每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间。 假设卡门预先知道了每个垃圾扔下的时间$ T (0 < T <= 1000),以及每个垃圾堆放的高度,以及每个垃圾堆放的高度,以及每个垃圾堆放的高度 .原创 2020-05-10 19:18:50 · 387 阅读 · 0 评论 -
【题解】奶牛的卧室
奶牛们有一个习惯,那就是根据自己的编号选择床号。如果一头奶牛编号是a,并且有0…k-1一共k张床,那么她就会选择a mod k号床作为她睡觉的地点。显然,2头牛不能睡在一张床上。那么给出一些奶牛的编号,请你为她们准备一间卧室,使得里面的床的个数最少。本题要求的,就是找一个最小的数m,使得任意两个数x,y,满足:(x mod m) != (y mod m).根据结论:当((x - y) mod m) != 0,则有:(x mod m) != (y mod m).证明:设:a % m = b.原创 2020-05-10 11:25:37 · 546 阅读 · 0 评论 -
牛客网-火车票订购【离散化+线段树】
火车经过X站,火车最大载客人数为m,有n个订票请求,请求订购从a站到b站的k张票,若能满足订购要求则输出1,否则输出0。半个月终于刷完了NK的200多道题,没想到在最后这里会遇到线段苏,首先,暴力很好写,维护一个区间,区间值初始为m,每次一个查询就把相应区间的载客人数减去相应人数,如果不够减就是0,否则为1,但是这道题很骚,不给数据范围,试了之后发现不行,数据太大链接:https://ww...原创 2020-05-06 11:28:24 · 410 阅读 · 0 评论 -
牛客网-第一题【并查集统计联通子图】
顶点的多少没有给出来,1000000是一个可以AC的范围,每次输入一对点,我们就将其归为一类,即并查集的unite操作,最后只需要统计并查集中有多少个元素满足kind[i]==i,这个条件即标识着一个新的联通子图。#define inf 0x3ffffff#define ll int#define MAX 1000005#define vec vector<ll>ll e...原创 2020-05-05 12:42:41 · 231 阅读 · 0 评论 -
牛客网-第二题【搜索/dp】
最小化和的差的问题,一开始想用二分法操作,但是发现二分不能很好的check。暴搜是个万金油,实现起来非常简单,将题目转化为:使用数组中的元素,拼凑出一个最接近数组和一半的值,搜索只需要剪枝一次即可AC,即发现了最优解直接返回,不用再继续下去。//找大于sum的最小的组合void dfs(ll i,ll tmp) { if (res == sum)return;//剪枝1:如果正好一半可以...原创 2020-05-04 12:35:49 · 184 阅读 · 0 评论 -
牛客网-遍历链表【升序链表插入】
#define inf 0x3ffffff#define ll intstruct E { ll val; E*next = NULL, *pre = NULL; E(ll a = 0) { val = a; }};void insert(E * root, ll val) { //找到第一个大于他的元素并插入 while (root->next && r...原创 2020-05-03 10:52:33 · 385 阅读 · 0 评论 -
c++正则表达式用法详解
C++11正式加入了regex库,下面通过几个简单的例子介绍一下regex库的使用。文章目录构造正则表达式regex_search()只查找到第一个匹配的子序列使用regex_iterator匹配所有子串regex_match全文匹配regex_replace要使用regex库,要包含头文件#include <regex>构造正则表达式构造正则表达式用到一个类:basic_r...转载 2020-05-01 09:24:36 · 3087 阅读 · 0 评论 -
牛客网-旋转矩阵/C翻转【简洁实现】
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。 要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。如果旋转角度的结果有多个,则输出最...原创 2020-04-30 13:03:45 · 724 阅读 · 1 评论 -
牛客网-最大报销额【dp/搜索】
有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。输入描述:原创 2020-04-27 16:43:36 · 454 阅读 · 0 评论 -
牛客网-二叉搜索树【二叉搜索树复习】
判断两序列是否为同一二叉搜索树序列输入描述:开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。二叉搜索树建树\color{blue...原创 2020-04-26 19:28:54 · 297 阅读 · 0 评论 -
牛客网-欧拉回路【判定条件论证】
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?原创 2020-04-26 14:17:16 · 631 阅读 · 0 评论 -
牛客网-整除问题【质因子分解】
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。原创 2020-04-25 18:47:52 · 1506 阅读 · 0 评论 -
Pre-Post详解【二叉树组合数】
给出n叉树的前序和后序遍历,问该n叉树有多少种。转载 2020-04-25 16:18:17 · 2630 阅读 · 3 评论 -
牛客网-2的幂次方【理解递归】
给定一个数,将他表示为只有0,2,()的形式,其中1==2(0),4=2(2),依此类推Every positive number can be presented by the exponential form.For example, 137 = 2^7 + 2^3 + 2^0。 Let’s present a^b by the form a(b).Then 137 is prese...原创 2020-04-25 14:19:11 · 279 阅读 · 0 评论 -
牛客网-计算表达式
显然我们需要先处理乘除,后处理加法,其实不需要堆栈也是可以做的首先我们把所有的运算符和操作数取出来。然后依次遍历运算符,先处理*/,处理完之后保留操作结果,删除参与运算的符号以及操作数,因为没有括号,所以肯定是从左到右进行运算的,bool check(char s) { if (s == '+' || s == '-' || s == '*' || s == '/')return t...原创 2020-04-25 12:40:41 · 351 阅读 · 0 评论 -
牛客网-Powerful Calculator【大数加减乘】
给两个非常大的数,求出它们的和,差,积典型的大数运算,大数乘法原理,做了不少题了,不过减法还是第一次遇到,稍微总结一下需要注意的点:将可能出现负数的减法运算提前判断符号,转化为大数减小数。减法如果某一位相减得到一个大于等于0的数,那么借位标志也要清零。int main() { string s1, s2; while (cin >> s1 >> s2) {...原创 2020-04-25 12:06:07 · 265 阅读 · 0 评论 -
牛客网-棋盘游戏【bfs】
有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代价最小的路径: 1、只能沿上下左右四个方向移动 2、总代价是没走一步的代价之和 3、每步(从a,b到c,d)的代价是c,d上的值与其在a,b上的状态的乘积 4、初始状态为1 每走一步,状态按如下公式变化:(走这步的代价%4)+1。原创 2020-04-24 16:54:32 · 404 阅读 · 0 评论 -
牛客网-String Matching【KMP裸】
给定字符串T和P,求出P在T中出现的次数原创 2020-04-24 12:59:31 · 413 阅读 · 2 评论 -
坠落的蚂蚁【思维/模拟】
第一行包含一个整数表示蚂蚁的个数N(2<=N<=99),之后共有N行,每一行描述一只蚂蚁的初始状态。每个初始状态由两个整数组成,中间用空格隔开,第一个数字表示初始位置厘米数P(1<=P<=99),第二个数字表示初始方向,-1表示向左,1表示向右,0表示静止。输出描述:蚂蚁A从开始到坠落的时间。若不会坠落,输出“Cannot fall!”思路分析首先我们需要明确一点...原创 2020-04-24 11:56:22 · 1955 阅读 · 2 评论 -
牛客网-八皇后【搜就完事】
先来看一看洛谷的八皇后问题,有了这个图就显得比较清晰了,就是在8*8或者6*6的棋盘上放置8或者6个棋子,使得棋子所在行列个不相交。建议直接学数独游戏,基本上搜索难不过八数码和数独毕竟我做的题少,没遇到过 。这道题打眼一看就要来搜索,那么我们就要确定搜索的状态是什么?如何进行搜索?如果我们使用dfs进行搜索,那么首先要保证的是条件:每行每列每条对角线都没有连个皇后,行和列还比较好处理,一旦...原创 2020-04-23 12:59:30 · 424 阅读 · 0 评论 -
牛客网-Number Steps【找规律】
给一串二维坐标的点集,给定一个二维坐标,求他是第几个点。原创 2020-04-23 11:34:09 · 293 阅读 · 0 评论 -
牛客网-浮点数加法【大数运算系列】
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2...Pi.Q1Q2...Qj 对于整数部分,P1P2...Pi是一个非负整数 对于小数部分,Qj不等于0原创 2020-04-23 10:17:14 · 473 阅读 · 0 评论