03 2019 档案
摘要:额,说实话,还是第一次这样用并查集 本质就是记录连通项的个数。如果,轰炸一个城市,产生一个或者不产生,则说明,该城市对其他城市的连接没有直接作用。 那么怎么来数每次的连通项呢?没错!有多少个祖先就有多少个连通项。其实,就是每次都要把边连接起来,当然,被轰炸的城市所在的边用该丢弃!
阅读全文
摘要:就是一个最小根堆。 最小根堆的性质,根节点小于等于子树的完全二叉树吧。 构建最小根堆的过程就是一个自下向上的过程。
阅读全文
摘要:落谷训练场: 普及练习场 第一题:铺地毯 第二题:多项式的输出:
阅读全文
摘要:树的遍历: 关键在与如何利用中序和后序建树。 中序的作用,提供了左右子树的所有节点的分布! 前序,后序的作用:就是第一个元素(最后一个元素)提供了根节点,让中序找到子树的分布情况。 玩转二叉树: 这里的改变只是在建树的时候,把原本左子树放在实际的右子树上,原本的右子树放在左子树上。
阅读全文
摘要:这里唯一需要注意的是,各个输出的条件在题目中有点描述模糊。 是朋友关系,(不管是不是间接朋友关系) 既不是朋友也不是敌人(这里不用管是不是间接朋友) 是敌人关系,同时是间接朋友关系 是单纯的敌人关系,(表示,不是间接朋友关系)
阅读全文
摘要:#include #include #include #include using namespace std; const int maxn = 2e5 + 1000; char s[maxn], str[maxn]; int len1, len2, p[maxn], ans; void init(){ str[0] = '#'; str[1] = '#'; for (...
阅读全文
摘要:#include #include #include using namespace std; const int maxn = 100; int af[maxn], in[maxn], n; struct node{ int l, r; }tree[maxn]; int biuld(int al, int ar, int bl, int br){ if (al > ar)re...
阅读全文
摘要:这个题要注意的是:右节点时大于等于根节点的。
阅读全文
摘要:#include #include #include #include using namespace std; const int maxn = 1e5+10; struct node{ int key, pre, next; }nn[maxn],mm[maxn]; struct kk{ int val, next; }mk[maxn]; mapss; int st, n, ...
阅读全文
摘要:题意:略 具体规律自己看一下 也就是这样的 1 2 3 4 1 2 3 1 2 4 1 2 3 1 2 4 1 2 3.。。。。 然后,自己去写就是了
阅读全文
摘要:思路:首先处理名字,让字符串直接映射唯一一个数字,这就用map<string, int>即可。 然后,直接用并查集
阅读全文
摘要:题意:就是让c=a*x+b,给你一个a[],b[],让你尽可能多的让c[]=0,输出有多少。 思路:直接令c=0,则x=-b/a, 也就是一条直线,通过这样就用hash值使相同的k值映射到一起,使用了map<long double , int>,这样就直接映射了。 让我吐血的是,这个还有特殊情况,a
阅读全文
摘要:思路:先说一下题意吧。就是给你n个文件大小为v,价值为c, 但是硬盘的大小为S, 而且要存的总价值大于等于p。问每次传输k大小的文件。问k的最大值是多少? 我们以k为二分对象。 直接讲检验函数吧。 假设每次传输x大小的文件,则我们可以要筛选出小于等于的文件。这些文件就像01背包问题中要装的物品一样,
阅读全文
摘要:思路: 我觉得我现在有一个非常不好的习惯,那就是不爱画图。当我把这个题的检验函数用图来表示出来。感觉就非常好理解了。 直接说检验函数吧。就是非常简单的模拟,我现在换成角度来说:假设你最小能跳x(不能跳小于x的步)那么,在这个过程中统计直接飞过去的石头的个数。 这样是不是很简单就可以统计出来sum。而
阅读全文
摘要:思路:检验函数中,先初始化每个节点的下标,每调用检验函数就从新使用一次并查集(并查集的时间复杂度非常低),然后,就看当一条路的价值val<=假设最大值x时,就把他们连接起来。
阅读全文
摘要:思路:先来分析一下数据范围,是1e4个数据,但是,是double类型,结果不超过0.01那么在绳子最大的情况下,单纯的找正确答案暴力的话就是1e7的时间复杂度,再乘上1e4的数据,这样肯定不行。那么很容易想到二分,在找答案时使用二分的话就可以让时间复杂度下降到log(1e7)这是一个比较小的值,起码
阅读全文
摘要:这道题让我见识了二分的新姿势。本来,我是二分的位置的。 思路:直接二分答案x, 关键是检验函数的写法: 先用前缀和 a[i....], 看满足多少段满足 a[ j ]-a[ i ]<=x; 的注意这里利用了贪心(因为,要使最大值最小,那么每一段要尽量接近x),然后,如果这样的段数刚好等于m 段时,就
阅读全文
摘要:思路:就是一个模板,只是找最小化而已。在判断函数里面:当湿度<=x*A不判断, 反之sum+=(a[i]-x*A)/B+(a[i]-x*A)%B?1:0;
阅读全文
摘要:思路: 求这个根,然后有一个关键的条件|x1-x2|>=1,然后就是从-100,枚举到+100,每次二分(i, i+1)注意如果f(i)*f(i+1)>0则不进行二分,如果,你觉得这样的值不行的话就把每次 i++ 变成 i+=0.5;就好了。反正数据范围很小..
阅读全文
