天梯练习
文章平均质量分 73
笔记笔记,越记越气
小白小郑
不能模仿谁,只能做自己。
展开
-
天梯题集——肿瘤诊断(三维bfs)
肿瘤诊断看到题目第一眼,就害怕了。上网一查,原来只是个三维 bfs 。这是一道错过就会后悔的题…菜是原罪…bfs模板题实现代码#include<bits/stdc++.h>using namespace std;int m, n, l, t, cnt;int zl[70][130][1300];bool judge[70][130][1300]={false};int A[6] = {0, 0, 0, 0, 1, -1};int B[6] = {0, 0, 1原创 2020-11-28 10:01:10 · 205 阅读 · 0 评论 -
天梯题集——社交集群(构造并查集)
社交集群第一眼这道题好像是并查集又好像不是,其实只需我们构造兴趣并查集,问题都将迎刃而解…解题思路①、并查集对兴趣进行并查集,一边压缩路径,一边读取数据,可以有效地避免路径被覆盖。(我就是忘记避免覆盖了…)int get_(int x){ if(u[x]==x) return x; return u[x]=get_(u[x]);}void un(int x,int y) //连接路径 { int xx=get_(x); int yy=get_(y); if(xx!=yy)原创 2020-11-27 21:07:40 · 149 阅读 · 0 评论 -
天梯题集——冰岛人(隐藏条件:考虑嫡系)
前文愿天下有情人都是失散多年的兄妹 与 冰岛人 解题思路几乎是同理的,不过这里需要考虑多一个是否嫡系的关系。(卡了我好久、又来一个隐藏条件,长知识、长知识…)。用递归实现很容易出现超时,循环果然比递归效率高。循环与递归效率的比较冰岛人解题难点①、记录数据——映射+结构体struct node{ string fa; int sex;};map <string, node> num;第一次把映射和结构体结合起来,查询方便了许多。②、判断 m1 与 m2 是否原创 2020-11-27 16:49:42 · 422 阅读 · 0 评论 -
天梯题集——多项式A除以B(多项式除法,递归与循环的效率比较)
多项式A除以B多项式除法这里就不展开介绍多项式除法,只需将多项式看成一个整体就类似于整数除法。(x3-1) / (x-1) = x2+x+1多项式除法的演示图解题思路:模拟 A / B 多项式除法方案一:递归#include<bits/stdc++.h>using namespace std;double Q[1000010], R[1000010];double a[1000010], b[1000010];int q[1000010], index_b=0;原创 2020-11-26 19:52:40 · 695 阅读 · 0 评论 -
天梯题集——愿天下有情人都是失散多年的兄妹(隐藏条件)
愿天下有情人都是失散多年的兄妹解题思路利用结构体读入每个 ID 下数据隐藏条件:标记父母的性别 (卡死个人)假设判断 a,b 是否可通婚同性输出 “Never Mind”不同性 bfs标记 a 的五代内的祖先 check检查 b 五代内的祖先 b 五代内的祖先被标记过 输出“No” b 五代内的祖先全部未被标记过 输出“Yes”#include<bits/stdc++.h>using namespace std;bool judge[100010];int原创 2020-11-26 13:10:54 · 260 阅读 · 0 评论 -
天梯题集——列车调度(模拟、二分)
列车调度题意这道题题意容易混淆,认为一条轨道只能停留一辆火车,其实不然。题目中每条轨道都可排列无数辆递减的火车。关键点:①、按入口顺序排列火车②、排列的每条轨道火车序号必须单调递减,否则增加新轨道按样例来说(圆形编号为轨道编号,数字编号为火车编号)有了以上的认识,问题就简单了。解题思路①、维护轨道数组维护一个轨道数组,代表每条轨道的末端火车序号,将火车按输入顺序一个个添加在轨道数组中。②、维护规则若当前要添加的火车序号大于每条轨道的末端火车序号,那么就开辟一条新的轨道放置当原创 2020-11-26 10:19:23 · 304 阅读 · 0 评论 -
天梯题集——关于堆的判断(小顶堆模板题、模拟构造过程)
堆是一种常用的树形结构,是一种特殊的完全二叉树,当且仅当满足所有节点的值总是不大于或不小于其父节点的值的完全二叉树被称之为堆。堆的这一特性称之为堆序性。因此,在一个堆中,根节点是最大(或最小)节点。如果根节点最小,称之为小顶堆(或小根堆),如果根节点最大,称之为大顶堆(或大根堆)。注意:堆的左右孩子没有大小的顺序。关于堆的判断这道题目完全可以看成一道堆的模板题,只要构建出小顶堆其他都好说。解题思路①、构建小顶堆小顶堆是构成原理:(1)插入第一个节点(2)插入第二个节点(不符合小顶.原创 2020-11-25 17:16:46 · 339 阅读 · 1 评论 -
天梯题集——家庭房产(并查集)
家庭房产解题步骤①、并查集将每个家庭都看成一个集合,再统计每个家庭的人数、房产套数、总面积。②、计算有效数据对于每个家庭来说人均房产套数:房产套数/家庭人数人均房产面积:总面积/家庭人数③、排名利用 sort() 函数得出排名。实现代码#include<bits/stdc++.h>using namespace std;int u[10010], C[10010], S[10010];bool judge[10010]={false};struct node原创 2020-11-23 20:01:14 · 274 阅读 · 0 评论 -
天梯题集——复数四则运算(fabs)
复数四则运算#include<bits/stdc++.h>using namespace std;double a1, b1, a2, b2;void print(char ch, double ans1, double ans2){ printf("(%.1lf", a1); if(b1>=0) printf("+"); printf("%.1lfi) %c (%.1lf", b1, ch, a2); if(b2>=0) printf("+");原创 2020-11-21 16:17:21 · 239 阅读 · 0 评论 -
基础算法题——求自定类型元素序列的中位数(插入排序、希尔排序)
排序算法总是学了又忘,基础太不牢靠了哎求自定类型元素序列的中位数预告:插入排序、冒泡排序、快排都会超时。希尔排序通过全部样例。解决方案:插入排序参考博客——插入排序引入插入排序参考博客的思想:插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中牌进行比较,如果有大于手中的牌则插入该牌的后面。接着摸桌子上的牌,继续重复上述步骤,如下图所示:(原创 2020-11-21 15:34:19 · 283 阅读 · 0 评论 -
天梯题集——紧急救援(Dijkstra+倒序打印分析)
Dijkstra算法:用于求单源到其他点的最短路径。紧急救援该题与 Dijkstra模板题 的不同之处在于该题需要记录更多信息,主要思路从局部最优到整体最优,类似dp的思想。#include<bits/stdc++.h>#define maxv 510#define INF 0x3f3f3f3f#define ll long long using namespace std;int mp[maxv][maxv]; // 地图int w[maxv]; /.原创 2020-11-19 18:29:11 · 156 阅读 · 0 评论 -
天梯题集——秀恩爱分得快(实现与讨论)
前言本文分为两个部分:实现、讨论。其中讨论部分表现出对计算机原理的思考…秀恩爱分得快该题并不是很难,只要会运用数组就能够实现,但如何用更简单的方式实现是值得我们深思的问题…实现下面是我借鉴 其他博主 改善的代码#include<bits/stdc++.h>using namespace std;double gx[1010][1010];bool sex[1010]; //bool类型更快于int类型,位数更少 int read(){ int num=0, f原创 2020-11-18 11:16:35 · 385 阅读 · 0 评论 -
天梯练习——数列求和-加强版(数学思维)
数列求和两种方法:大数相加、位运算。大数相加这个相对比较暴力,单纯的枚举相加,在 N 取较大的时候会超时,复杂度估计要 O(n2)以上。//暴力法 #include<bits/stdc++.h>using namespace std;int s[100010], now[100010];int n, h;void add(int tmp){ int d=0; int c = max(h, tmp); for(int i=0; i<=c; i++){ s[i原创 2020-11-15 10:17:42 · 294 阅读 · 0 评论 -
基础算法题 —— 说反话-加强版(字符串截取)
说反话-加强版给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。输出格式:每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。输入样例:Hello World Here I Come输出样例:Come I Here World Hello复习基础 c++ 中 ge原创 2020-11-12 09:34:19 · 313 阅读 · 0 评论 -
天梯习题——阶乘计算升级版(乘法原理、大数相乘)
阶乘计算升级版原创 2020-11-10 13:26:02 · 321 阅读 · 0 评论 -
基础算法题——天梯赛座位分配(化繁为简)
天梯赛座位分配天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位原创 2020-11-04 13:01:32 · 1992 阅读 · 0 评论 -
基础算法题——整除光棍(Java大数)
整除光棍这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 ——原创 2020-10-27 23:55:43 · 298 阅读 · 0 评论 -
基础算法题——学长的白日梦(快速幂、快速逐步求积)
学长的白日梦题目简单明了,只要将计算出 xi 即可。两个卡点:①、快速幂②、快速逐步求积由于这道题 mod = 999999997 。mod * mod > 10^19,不能直接用快速幂解决,中间求积会爆。于是我卡在逐步求余上动弹不得,唉~看了题解后发现在快速幂中高效地实现逐步求积即可解决问题,代码思想与快速幂异曲同工。就很妙,很舒服。//快速逐步求积long long quick_mul(long long a, long long b){ ll ans = 0; w原创 2020-10-29 16:07:15 · 158 阅读 · 0 评论 -
基础算法题——估值一亿的AI核心代码(细节拉满)
估值一亿的AI核心代码以上图片来自新浪微博。本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:1、无论用户说什么,首先把对方说的话在一行中原样打印出来;2、消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;3、把原文中所有大写英文字母变成小写,除了 I;4、把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;5、把原文中所有独立原创 2020-10-31 10:10:15 · 813 阅读 · 0 评论 -
基础算法题——每日咕咚(规律、数学约分)
每日咕咚题目考察 找规律、数学约分解题步骤①、找规律每个人排在每个位置的次数是相同的,都是 n-1 的阶乘。所以我们只要计算出 每个人在每个位置的超越的时间再乘以 n-1 即可得到全部情况的时间和 sum。将 sum / n-1的阶乘 就是期望时间。可得到下面代码#include<bits/stdc++.h>#define ll long longusing namespace std;ll dp[510];int main(){ float n, x, v,原创 2020-10-30 01:34:35 · 279 阅读 · 0 评论