![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
kerman_jt
个人网站:kermanjt.com
展开
-
蓝桥杯 合根植物
一道简单的并查集求连通分量题目,没有什么可以说的,题目链接。 #include <iostream> #include <algorithm> #include <string> #define maxn 100005 using namespace std; int pre[maxn]; int find(int x) { int r = x; ...原创 2019-02-28 21:52:32 · 206 阅读 · 0 评论 -
cf Santa Claus and Keyboard Check
这是一道模拟水题,当时居然没有做出来www。用一个数组来记录哪些字母是对应的,然后如果出现已经出现的字母对应的字母不对应就输出-1,当时一直卡住,不知道哪里错了,后面发现是一个逻辑写错了,要先记录字母再判断是否要放入vector输出,一开始我是判断了是否相等然后再来做,一直卡在14组。因为先判断的话会让这个字符相等的没有做字符对应。 #include <iostream> #inc...原创 2019-03-07 21:40:55 · 121 阅读 · 0 评论 -
最小生成树
最小生成树的两种最常见的算法Kruskal和prim。其他的我也不会啊! 先来说简单的Kruskal算法,它本质上是一个贪心的策略,每次选权值最小的边,当然前提是边的两个顶点不在同一颗树里面。因此首先根据权值大小按从小到大的顺序排序,然后根据条件开始选择直到所有顶点都在一颗树内或者有n-1条边为止。这里还用并查集进行了优化。并查集不了解的可以看并查集 Kruskal算法: #include...原创 2019-03-06 17:47:43 · 84 阅读 · 0 评论 -
cf The Two Routes
这边很平常的最短路不同的是,它的铁路和公路要分开来算,另外注意这边它要求的是所有点都必须要有一条边,如果没有铁路的会有一条公路相连的。本来想用两次spfa来算的,然后比较取最大值就行了,后来想想只要一次就可以了。只要加个判断就好了,因为如果map[1][n]有直达的路只要算公路的就行了,如果没有直达的路的话算铁路的就行了,因为公路的肯定直达了。 #include <iostream>...原创 2019-03-03 20:53:37 · 77 阅读 · 0 评论 -
cf Mike and Shortcuts
题目有点难读,理解后发现就是一道裸的最短路,随便用哪个最短路算法都能出来,我这里用的是spfa,然后根据题意来建图就ok了。 #include <iostream> #include <algorithm> #include <string> #include <vector> #include <queue> #define max...原创 2019-03-03 20:44:40 · 134 阅读 · 0 评论 -
并查集
并查集的操作有三步,初始化,查找祖先与合并。 并查集的初始化是让每个点的祖先指向自己。 for(int i=1;i<=n;++i) f[i]=i; 下面来写查找祖先的find函数。 int find(int x) { if (x == f[x]) //如果是祖先就返回 return x; else //如果不是就递归进行查找 ...原创 2019-03-08 17:12:13 · 87 阅读 · 0 评论 -
HDU 5750
题意大概是给一个n和d,问都多少小于n的数的最大因子d。一开始一直t,没有想到素数筛,其实只要先打表找出所有素数,然后直接暴力就行了。一个数d*x的最大因子为d,则x必为素数,否则可以再分即 x=x1*x2, x1*x2*d那就存在大于d的因子了,并且要满足x要小于d的最大素因子。 #include<iostream> #include<string> #include...原创 2018-12-03 20:35:09 · 173 阅读 · 0 评论 -
cf 769 D Police Stations
题目的大意是给你一颗n结点的树,然你删除尽可能多的结点仍能让题目给出的一些树中特殊标记过的结点满足任意点距离d内都有特殊结点。 由于是树,而又要满足题意,所以k个点最多删除不能超过k-1条边,但题目中给的k是可能存在一个结点有相当于多个特殊点,所以是坑点,不能直接用它给的。不要想太多直接bfs搜就对了,如果当前边没走过但是到的点走过了,就可以删除,这样一遍就可以了,也不会存在什么问题。 #i...原创 2018-12-10 10:29:32 · 126 阅读 · 0 评论 -
cf 796 c Bank Hacking
题目大意是有n个结点,n-1条边,然后如果删除本结点,与本结点直接相连的结点权值加1其余间接相连的加2,然后让你求最少需要多少vlaue能把所有的边都删除。 这题其实一道分类讨论的题目,假设所有的点的最大权值为maxa,有此最大权值的个数为mx,而maxa-1的个数有mc个,存在三种情况: 1.答案为maxa, 当mx==1,且与maxa直接相连的结点个数==mc。 2.答案为maxa+1,...原创 2018-12-10 10:47:22 · 190 阅读 · 0 评论 -
HDU 4704
题意大概是将N拆分成1-n个数,问有多少种组合方法。这个排列组合推一下是S(n) = 2^(n-1)。但由于n非常大,自然想到了快速幂,但发现还是不行,需要用结合费马小定理来解, 费马小定理的公式为: a^(p-1)%p = 1,前提互素这里满足。这样只要求(N-1)%(Mod - 1),然后用快速幂求解即可。 #include<iostream> #include<st...原创 2018-12-03 20:07:46 · 177 阅读 · 1 评论 -
poj 2018
题目大意是在一个给定区间中,找出大与等于给定区间长度的连续的段,使其的平均值最大。 这是问题转化一下就是求是否存在一段连续的子段减去一个数的和大于0,这里加了给附件条件,就是这个连续子段的长度要大于等于给定的长度,转化为这个问题后我们就用二分快速找到这个段就可以了,并用前缀和优化。 #include<iostream> #include<string> #includ...原创 2018-11-11 18:48:09 · 154 阅读 · 0 评论 -
CF - 1073c Vasya and Robot
题目的大意大概是有一个机器人从(0,0)出发,根据给定的方向行走,然后给定一个坐标,让你改变最小的步数来使得机器人走到那里,如果无法到达输出-1. 思路: 先按原来的序列计算x,y的前缀和,然后二分,找出需要改变的最短区间长度,枚举所有的长度为m的区间,然后判断区间是否符合条件,若符合就进行二分,条件为改变区间的贡献值小于区间长度且剩余的个数为偶数个。代码如下: #include<i...原创 2018-11-11 18:36:55 · 131 阅读 · 0 评论 -
POJ 3264 Balanced Lineup
题目大意是:一个农夫有N头牛,每头牛的高度不同,让你找出指定区间最高牛和最低牛的高度差。 解题思路: 一看到题目就想到了线段树,然后用了递归的线段树,一开始一直TLE,本来想换成非递归版本,后来输入输出优化了一下就A了,这让我感受到了优化的妙处!!! #include<iostream> #include<string> #include<algorithm&...原创 2018-10-27 10:25:22 · 83 阅读 · 0 评论 -
蓝桥杯 算法提高 P1003
这题很简单的模拟题,一开始怕超时,结果发现数据很水,不过这里有个坑,它要求的是按照第一行的顺序输出,真的是超级坑啊!!!我瞎了。。。 #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #d...原创 2019-03-02 20:06:40 · 323 阅读 · 0 评论 -
cf Santa Claus and Robot
这道题只要记录一下方向的改变就可以了,改变一次加1,记得最后还要加1。 #include <iostream> #include <algorithm> #include <string> #define maxn 10000 using namespace std; int main() { int n; cin >> n;...原创 2019-03-07 21:42:52 · 174 阅读 · 0 评论