C/C++
kerman_jt
个人网站:kermanjt.com
展开
-
蓝桥杯 合根植物
一道简单的并查集求连通分量题目,没有什么可以说的,题目链接。#include <iostream>#include <algorithm>#include <string>#define maxn 100005using namespace std;int pre[maxn];int find(int x){ int r = x; ...原创 2019-02-28 21:52:32 · 208 阅读 · 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 · 178 阅读 · 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 · 88 阅读 · 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 · 140 阅读 · 0 评论 -
cf The Two Routes
这边很平常的最短路不同的是,它的铁路和公路要分开来算,另外注意这边它要求的是所有点都必须要有一条边,如果没有铁路的会有一条公路相连的。本来想用两次spfa来算的,然后比较取最大值就行了,后来想想只要一次就可以了。只要加个判断就好了,因为如果map[1][n]有直达的路只要算公路的就行了,如果没有直达的路的话算铁路的就行了,因为公路的肯定直达了。#include <iostream>...原创 2019-03-03 20:53:37 · 79 阅读 · 0 评论 -
最小生成树
最小生成树的两种最常见的算法Kruskal和prim。其他的我也不会啊!先来说简单的Kruskal算法,它本质上是一个贪心的策略,每次选权值最小的边,当然前提是边的两个顶点不在同一颗树里面。因此首先根据权值大小按从小到大的顺序排序,然后根据条件开始选择直到所有顶点都在一颗树内或者有n-1条边为止。这里还用并查集进行了优化。并查集不了解的可以看并查集Kruskal算法:#include...原创 2019-03-06 17:47:43 · 86 阅读 · 0 评论 -
单源最短路径
这里讲两个算法:dijkstra和spfa。floyd就不说了复杂的太高达到o(n3),不过多源用它还是很好的。先来spfa,这个算法可以说是很快了,但是是玄学算法没人能解释。o(ke),不过一般出题人都会卡它...这边用的是队列,首先用数组dis记录起点到每个结点的最短路径,用邻接表来存储图,用vis数组记录当前节点是否在队列中,用队列来保存待优化的结点,优化时每次取出队首结点,并且用队...原创 2019-03-10 13:34:47 · 121 阅读 · 0 评论 -
cf Santa Claus and Keyboard Check
这是一道模拟水题,当时居然没有做出来www。用一个数组来记录哪些字母是对应的,然后如果出现已经出现的字母对应的字母不对应就输出-1,当时一直卡住,不知道哪里错了,后面发现是一个逻辑写错了,要先记录字母再判断是否要放入vector输出,一开始我是判断了是否相等然后再来做,一直卡在14组。因为先判断的话会让这个字符相等的没有做字符对应。#include <iostream>#inc...原创 2019-03-07 21:40:55 · 124 阅读 · 0 评论 -
cf Santa Claus and Robot
这道题只要记录一下方向的改变就可以了,改变一次加1,记得最后还要加1。#include <iostream>#include <algorithm>#include <string>#define maxn 10000using namespace std;int main(){ int n; cin >> n;...原创 2019-03-07 21:42:52 · 181 阅读 · 0 评论 -
cf 769 D Police Stations
题目的大意是给你一颗n结点的树,然你删除尽可能多的结点仍能让题目给出的一些树中特殊标记过的结点满足任意点距离d内都有特殊结点。由于是树,而又要满足题意,所以k个点最多删除不能超过k-1条边,但题目中给的k是可能存在一个结点有相当于多个特殊点,所以是坑点,不能直接用它给的。不要想太多直接bfs搜就对了,如果当前边没走过但是到的点走过了,就可以删除,这样一遍就可以了,也不会存在什么问题。#i...原创 2018-12-10 10:29:32 · 130 阅读 · 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 · 191 阅读 · 0 评论 -
蓝桥杯 算法提高 P1003
这题很简单的模拟题,一开始怕超时,结果发现数据很水,不过这里有个坑,它要求的是按照第一行的顺序输出,真的是超级坑啊!!!我瞎了。。。#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <vector>#d...原创 2019-03-02 20:06:40 · 324 阅读 · 0 评论 -
随便尝试了简单的开方
期间尝试了把%d改为%f发现程序完全得不到正确的答案了,才明白这个不能随便改 。有自以为把int改为float就可以计算那些不能开的尽的数了,结果发现自己还是too young,网上查了下发现定义sqrt()居然这么难...原创 2017-11-07 22:56:19 · 144 阅读 · 0 评论 -
萌新又试水了,这是第一个做好的程序
改了好多次才把这个程序做成功,当时成功的那一瞬间是很激动的。有了几点收获:1.一位大佬告诉我编程中是不需要printf一些没用的中文的 2.知道了scanf("")里面是不能随便空格的当时就被scanf("%d %d ")困扰了好久 3还有0<I<=j<=m.这种连等是...原创 2017-11-11 16:37:47 · 136 阅读 · 0 评论 -
做了个类似与学生管理系统的东西
经过一段时间的学习,又有了新的收获刚好有同学找到了我,让我帮他写一个类似与学生管理系统一样的东西,经验有限,所以,不足之处请多多指正,欢迎评论。下面就先贴上源码了。 #include<iostream>#include<string>#include<algorithm>#include<conio.h>#include<...原创 2018-04-15 08:03:59 · 714 阅读 · 1 评论 -
POJ 3264 Balanced Lineup
题目大意是:一个农夫有N头牛,每头牛的高度不同,让你找出指定区间最高牛和最低牛的高度差。解题思路:一看到题目就想到了线段树,然后用了递归的线段树,一开始一直TLE,本来想换成非递归版本,后来输入输出优化了一下就A了,这让我感受到了优化的妙处!!!#include<iostream>#include<string>#include<algorithm&...原创 2018-10-27 10:25:22 · 84 阅读 · 0 评论 -
CF - 1073c Vasya and Robot
题目的大意大概是有一个机器人从(0,0)出发,根据给定的方向行走,然后给定一个坐标,让你改变最小的步数来使得机器人走到那里,如果无法到达输出-1.思路:先按原来的序列计算x,y的前缀和,然后二分,找出需要改变的最短区间长度,枚举所有的长度为m的区间,然后判断区间是否符合条件,若符合就进行二分,条件为改变区间的贡献值小于区间长度且剩余的个数为偶数个。代码如下:#include<i...原创 2018-11-11 18:36:55 · 141 阅读 · 0 评论 -
poj 2018
题目大意是在一个给定区间中,找出大与等于给定区间长度的连续的段,使其的平均值最大。这是问题转化一下就是求是否存在一段连续的子段减去一个数的和大于0,这里加了给附件条件,就是这个连续子段的长度要大于等于给定的长度,转化为这个问题后我们就用二分快速找到这个段就可以了,并用前缀和优化。#include<iostream>#include<string>#includ...原创 2018-11-11 18:48:09 · 160 阅读 · 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 · 184 阅读 · 1 评论 -
gcc 编译出现exp, sin等math库函数缺失的错误
这种错误很常见,一般是makefile中最后忘记加上-lm了,加上后就可以链接math,但是我遇到一种情况是很老的代码,-lm不是放在最后,而是放在了中间导致了错误,值得注意....原创 2019-08-22 11:02:39 · 736 阅读 · 0 评论