并查集并查集简介并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:
合并(Union):把两个不相交的集合合并为一个集合。
查询(Find):查询两个元素是否在同一个集合中。
实现并查集路径压缩1234567891011121314//初始化,每个人都是自己的爹void init(int n) { for (int i = 0; i <= n; i++) { fa[i] = i; }}//查询(路径压缩)int find(int t) { return fa[t] =...
L2-029 特立独行的幸福对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数的个数。如果这个数还是个素数,则其独立性加倍。例如 19 在区间...
C++ unordered_map1、unordered_map简介unordered_map是C++11正式加入的对hash_map的官方实现。元素在内部不以任何特定顺序排序,而是放进桶中。元素放进哪个桶完全依赖于其键的hash。这允许对单独元素的快速访问,因为一旦计算hash,则它准确指代元素所放进的桶。但unordered_map搜索、插入和元素移除拥有平均常数时间复杂度。
2、头文件1#include <unordered_map>
3、成员函数
成员函数
函数功能
insert
在unordered_map中插入元素。
emplace
构造新元素并将...
C++ map1、map简介map是STL的一个关联容器,它提供一对一的hash。自动建立key-value的对应。key 和 value可以是任意需要的类型,包括自定义类型。因为map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。
map主要用于一对一映射(one-to-one)的情況。map內部的实现了一个红黑树,这颗树具有对数据自动排序的功能。同时对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。
2、头文件1#include <map>
3、成员函数
成员函数
函数功能
insert
在map中插入...
L2-019 悄悄关注新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。
输入格式:输入首先在第一行给出某用户的关注列表,格式如下:
1人数N 用户1 用户2 …… 用户N
其中N是不超过5000的正整数,每个用户i(i=1, …, N)是被其关注的用户的ID,是长度为4位的由数字和英文字母组成的字符串,各项间以空格分隔。
之后给出该用户点赞的信息:首先给出一个不超过10000的正整数M,随后M行,每行给出一个被其点...
最长回文子串Manacher简介Manacher算法,又叫“马拉车”算法,可以在时间复杂度为O(n)的情况下求解一个字符串的最长回文子串长度的问题。
C++模板123456789101112131415161718192021222324252627282930313233343536373839404142434445464748string Manacher(string s, int start, int end) { int pos = 0; int right = 0; int ansPos = 0; int ansLen = 0; ve...
L2-020 功夫传人 (25 分)一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。
这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以带很多徒弟;并且假设辈分严格有序,即祖师爷这门武功的每个第i代传人只能在第i-1代传人中拜1个师傅。我们假设已知祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除...
L2-021 点赞狂魔 (25 分)微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性。本题就要求你写个程序,通过统计每个人点赞的不同标签的数量,找出前3名点赞狂魔。
输入格式:输入在第一行给出一个正整数N(≤100),是待统计的用户数。随后N行,每行列出一位用户的点赞标签。格式为“Name K F1⋯F**K”,其中Name是不超过8个英文小写字母的非空用户名,1...
L2-022 重排链表给定一个单链表 L1→L2→⋯→Ln−1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln−1→L2→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。
输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105)。结点的地址是5位非负整数,NULL地址用−1表示。
接下来有N行,每行格式为:
1Address Data Next
其中Address是结点地址;Data是该结点保存的数据,为不超过105的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。
输出格式:...
L2-026 小字辈本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。
输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。
输出格式:首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。
输入样例:1292 6 5 5 -1 5 6 4 7
输出样例:1241 9...