摘要:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 typedef bitset<10000> bint; 6 inline bint plus(bint a,bint b){ 阅读全文
摘要:
题意: 一颗树,q次查询从u到v路径上所有权值在l到r之间的和。 分析: 一开始想写树上主席树,然后感觉内存不够就放弃。 然后想了一个小时,然后发现,询问似曾相识,回忆起一题。 然后发现直接离线搞就行了。 确切的说这题和HDU4417是完全一样的。 将询问排序,然后把小的点加进去,然后查询。 至于l 阅读全文
摘要:
题意: 给一颗K叉树,统计所有子树大小的异或和,节点数n和k都小于1e18。 分析: 比赛时候一开始被公式搞懵逼了,然后队友30分钟就A掉了。 昨天自己写了一下,哇好难写,各种bug,什么时候自己的代码能力这么弱了- -。 其实也很简单,因为n个节点分成K叉树,最后一层必然出现三种情况。 一种是满K 阅读全文
摘要:
分析: 现场的时候,学长A的很快,队友写了一个瞎几把优化的素数筛,C++T了。 然后本地试了15组最差数据,跑了6s,然后就用java重写一波,交了之后7sA了。。 又学了一招,,C++勉强超时java说不定可过。。 不过正解应该在《挑战程序设计》的120-121页,一模一样的数据规模,,学长就是改 阅读全文
摘要:
题意: 两个操作: 1、把一条树链上的所有点权值变为w。 2、查询一条树链上有多少个颜色段 分析: 一看就是区间合并,做这到题首先需要一定的区间合并基础, 不过这题合并这部分在线段树区间合并中已经算是非常的简单的了。 线段树部分没有难度。 那么难点在于,在往LCA上走的时候,我们如何进行区间合并。 阅读全文
摘要:
前言: 一直听说树链剖分-树链剖分,现在见识一下,,,感觉不是很难0.0 看了一下kuangbin模板基本秒懂 对于点,按重边优先给予每个点一个编号,对于一条重链上的点,编号则是连续的,将所有编号映射到线段树上,即可进行一切区间操作。 对于边的处理,我们将所有边对应到这条边节点更深的那个点上即可。 阅读全文
摘要:
题意: 两种询问: 1、询问以u为根的子树中出现的a次的数的和与出现b次的数的和的gcd。 2、询问u到v的树链中出现的a次的数的和与出现b次的数的和的gcd。 有点绕。。 分析: 因为自己不会树上莫队,所以学习了一波。 但是对于子树我还是有所经验,可以转成dfs序来做,之前有做过类似的题,比如这题 阅读全文
摘要:
题意: 多次查询一个树链上的中位数(其实就是求K大)。 分析: 感觉莫队可做,只是不会树上莫队。。 而且这里是边权,处理起来貌似有点小麻烦。。 后来发现其实貌似是一个很老的题,,kuangbin模板书上有类似的题。 树链上的第K大数,这是一道可以用主席树解的题,复杂度才nlogn。 这里也是这样先求 阅读全文
摘要:
题意: 一个长度为n的数列,m次查询L到R之间所有连续子序列的gcd之和。 分析: 很明显的莫队算法。 很明显发现了gcd是单调递减的,并且最多存在32个的性质。 想了很久,脑补了许多种方法来拉伸L和R,但是都有漏洞。 实际上,这道题还是比较复杂的。。 在思考的过程中,我没有充分利用gcd的递减性质 阅读全文
摘要:
因为这两题差不多,而且比较简单,就放一起,做了这题,这种题目就是巨水的题了。随便写都行。 CodeForces - 86D Powerful array 题意: 多次查询数列中从L到R每个数字出现次数的平方乘这个数字的和。 代码: 1 #include <cstdio> 2 #include <cs 阅读全文
摘要:
题意: 长度为n的数列,m次询问,还有一个k。每次询问询问询问从数列的L到R内有多少个连续子序列异或起来等于k。 分析: 因为事先知道这题可以用莫队写,就正好用这题练习莫队。 预处理每个前缀异或和。 然后莫队按分块排序后,不断更新,用一个数组cnt[]记录当前L到R前缀和的数量。 R向右拉,新增的数 阅读全文
摘要:
1 { 2 "cmd": ["g++", "-std=c++11", "${file}", "-o", "${file_path}/${file_base_name}"], // For GCC On Windows and Linux 3 //"cmd": ["CL", "/Fo${file_base_name}", "/O2", "${file}"], // Fo... 阅读全文
摘要:
题意: 一颗根为1的树,每个节点有一个颜色,现在有十万次查询,问x的子树中数量超过k的颜色个数有几个。 分析: 一开始想了一下,朦朦胧胧的觉得dfs一下应该可以做,但是也只是朦朦胧胧,并不知道怎么下手。 百度了一下,“好题中的好题”,4解。 对于前两种方法,依赖于dfs序。 具体的可以自行百度,非常 阅读全文
摘要:
题意: 一个n*m的矩阵,最多20行,元素总数量不超过1000000,三种操作,子矩阵+v,子矩阵=v,还有查询子矩阵的(最大值,最小值,和)。 分析: 显然需要懒惰标记,而且需要两个,一个lazy表示赋值的标记,一个add表示增加的标记。 而且需要优先级,显然赋值的优先级比增加高。 因为如果节点上 阅读全文
摘要:
题意: 一个数列,多次查询L到R最多连续相同数字的数量。 分析: 显然区间合并。不过还就没写了,都有点忘了。 不过回忆一下,push_down还是写对了。 不过WA了,后来仔细想一想,光查询光用已经维护的答案还不够,还需要在query的时候再合并一下,才能更新出正确的答案。 代码: 阅读全文
摘要:
题意: 一个串(串中只有26个小写字母),选一个区间进行排序,进行100000次,输出最后的串。 分析: 比赛的时候很懵逼,感觉这题跟之前的额大崩龙有点像,但是没多想,也怪自己太菜了。 确实是真的像,甚至是一模一样啊。 对于每次排序只需要进行一次类似计数排序的的操作即可,26个字符,进行26次区间赋 阅读全文
摘要:
这种渣比代码也能A? 数据太水了吧。。 按长度统一起来算一次滑动窗口的哈希值,sort一下,二分算数量。 复杂度应该是sqrt(T)*n*logn吧。 自己出个数据都能卡掉。 阅读全文
摘要:
665E 题意: 给一个数列和一个整数k,求这个数列中异或起来大于等于k的子串数量。 分析: 其实只要维护一个维护前缀和就行了,把前缀和加到字典树里,然后递归search一下,注意需要剪枝,不然会T, if(s + (1ll << (i + 1)) - 1 < k)return 0; 这句话的意思是 阅读全文
摘要:
题意: 给定一个数列,最多10万次查询l到r不超过h的数字的个数。 分析: 唉,太菜啦。 在线做法应该比较明显,区间维护平衡树,用线段树套平衡树,或者分块套平衡树,应该都能A,但是没试过,只是BB,如有错误欢迎指正。 其实最方便的做法离线做法,太巧妙啦。 把数列按升序排列,把所有查询按h升序排列。 阅读全文
摘要:
题意: 有一个棵树,现在让你找两个点连接起来,这样必然成为一个环,现在要求这些环长度的期望,也就是平均值。 分析: 第一次做LCA题,做多校的时候,瞎几把找了模板敲,敲了个八九不离十,只是姿势不太好,需要考虑很多细节。 其实我觉得这题最多只能算中等题。 因为一直没空,写题解也晚了,已经有很多人写了题 阅读全文
摘要:
题意: 给定一张无向图,求出一个最长边减最短边最小的生成树。 分析: 这题之前做过一模一样的(应该是。。。),跑kruskal算法,维护一个subset,一旦出现了环,就删除这条环上最轻的边,不断更新subset,subset中存当前生成树的边,一旦边的个数m=点数n-1,就更新ans。 这个复杂度 阅读全文
摘要:
题意: 给定一个有向图,求以某个给定顶点为根的有向生成树(也就是说沿着这N-1条有向边可以从根走到任一点),使权和最小。 分析: 这题直接朱刘算法,虽然看起来很偏门,但是还是要学一下。算法过程很多博客都有了,这里就不赘述了。 不过貌似CSU1828是朱刘算法+AC自动机,可以刷一刷。 代码: 阅读全文
摘要:
题意: 给定一个序列,求异或和与按位与和相同的区间有几个。 异或和:n个数异或起来。按位与和类似。 分析: 这才是神题,基础算法大杂烩。 问大佬这题的时候,人家只说很不难啊。。 只能说自己太菜。 由于询问区间个数,自然要快速知道某一个区间的异或和与按位与和。 异或和很简单,利用他的性质,直接求前缀和 阅读全文
摘要:
题意: n个无线AP,有xy坐标属性,现在n个无线AP要桥接在一起不能断开连接,现在要求无线AP无线网络的覆盖半径最小是多少 分析: 看起来是像是最小生成树,这里是是求生成树中最长的边最短,就是最小瓶颈生成树。 可以证明最小瓶颈生成树就是最小生成树,详细看刘汝佳《算法入门经典训练指南》343页。 当 阅读全文
摘要:
题意: 在一个有向加权图中找到一个环,使这个环点权和/边权和 最大 分析: 一开始还没做过最优比率生成树,但是看到过,两题都A不了。 后来看了题解,索性一起撸掉。 这题可以用类似最优比率生成树的方法做,二分答案。 具体: 这个题解讲的很详细了。 代码: 阅读全文
摘要:
题意: 很多村子,村子有三维坐标的属性,现在要求一个生成树,使得总高度和总宽度比率最小。 分析: 很经典的题型,可以使用二分来做,这里引用红书上的【说明】。 二分答案,假设最小的答案为best,二分答案为ans,那么我们将每条边的边权变为wi-ui*ans,则: ans<best时,求最小生成树得到 阅读全文
摘要:
题意: 平面上有很多点,有些点已经连了起来,现在想让你再连点,使得所有点连通,并且使新连接总距离最小。 分析: 显然最小生成树,但是不知道怎么处理已经连好的边。 看了别人的代码,才想到,直接把已经连好的边的花费赋为0不就行了。 因为你只需要弄出最小生成树,而已经在新增边的时候让已经连好的边优先选。 阅读全文
摘要:
题意: 给一个无向带权图,图上有不超过20个人和1个公园,现在这些人想到公园去集合,他们可以直接去公园也可以,和其他人一起坐车去公园(假设他们的车容量无限),但是这个公园停车场只有k个位置,现在要求他们到达公园所需要的总花费。 分析: 乍一看是最小生成树,但是停车场只有k个位置,所以就限定了公园节点 阅读全文
摘要:
题意: 给一个无向带权图,求从s到t走k次的最短路。 分析: 一开始没想到,其实应该想到的,看到这种k很大,而且精确k次的题目,第一个一定要考虑快速幂。 而这题就是矩阵快速幂,而乘法的过程不是普通乘法,以为给的邻接矩阵表示的花费,所以只有相加才能计算两次走路的花费。 而最短路就是运用floyd的思想 阅读全文
摘要:
题意: 给一个有向图,计算最短路和比最短路少1的路的条数的和。 分析: 这题真的写死我了。 因为之前很少接触最短路问题,所谓偶尔遇到一次也是套的模板,根本没有细细思考过dijsktra算法。所以栽在了这题上。 这题就是求最短路和次短路。 核心思想在于修改最短路松弛的条件,并且每个节点同时维护最短路和 阅读全文
摘要:
题意: 给一个DAG,要求s到t的第K短路,很经典的问题。 分析: 我们可以看到k<=1000,这个值不是很大,我可以想到直接bfs走遍所有情况,最多也就有1000中情况,但是1000个点显然会M。 既然是要求k短路,也就是说最终计算出来的到达t的花费必然是递增的,也就是说我们在搜索的时候肯定要用到 阅读全文
摘要:
题意: 给定一个无向带权图,判断这个图是否有唯一的最小生成树,如果有输出最小生成树,否则输出Not Unique! 分析: 模板题,但是对于判断唯一性,有一定的小技巧,先算出整个图的最小生成树,记录这个最小生成树的所有边,然后在整个图中枚举把之前最小生成树删掉一条边,再求最小生成树,一旦出现相同的总 阅读全文
摘要:
题意: 有一个n个点m条边的图,每条边有个权值,现在要求此图所有生成树中最大权值和最小权值的差(暂且称为极差)的最小值。 分析: 如果暴力所有生成树复杂度是O(m^2)必然T,所以需要优化。 参考Kruskal算法,把边按权值从小到大排序,一条边一条边的加入,如果发现有环,说明这个环,可以进行优化, 阅读全文
摘要:
题意: 一条线上有n个人,每个人一个坐标值xi,每个人有一个最大行走速度vi,问如果要让这n个人走到线上某一个点,最少需要多少时间。 分析: 看起来是二分, 二分坐标。 后来得知其实是爬山法 二分区间变化的条件,一开始感觉是比较当前mid坐标左右人们用最快速度到达的平均时间, 后来具体写的时候感觉是 阅读全文
摘要:
下载Wordpress wget http://wordpress.org/latest.tar.gz 解压文件包。假设解压至用户的主目录中。 tar -xzvf latest.tar.gz 创建Wordpress数据库和用户 登录MySQL mysql -u root -p 创建数据库: CREA 阅读全文
摘要:
题意: 一棵树,每个节点有一个权值t,把它分成三部分,每部分要求权值和相等。 分析: 先可以先算出总大小sum。 接着%3看能不能分,不能-1,能继续。 然后递归算出每个子树的权值和。 一开始想到直接找出两个sum/3就行了,后来发现还会可能有两个分点输出祖辈关系。 想到半天,感觉很容易dfs写,, 阅读全文
摘要:
需求: 最近喜欢折腾各种编辑器。 用了vscode官方的c/c++插件,配好launch.json和tasks.json之后用debug还是感觉很不错的。 但是感觉对于acm有些用不上,反而不太灵敏,用起来也不太方便。 就想配成像subliime自带的那样: 1、编译之后直接运行 2、可以把输出显示 阅读全文
摘要:
直接贴当时的实验报告吧。 1、课程题目 模仿腾讯QQ实现一个即时聊天软件,可以进行好友管理以及私聊等功能。 1.1功能性分类 功能类别 功能名称、标识符 描述 用户信息 用户登陆 用户登陆 用户注册 用户注册 修改密码 通过验证后修改密码 修改信息 修改昵称,个性签名,生日,学校,公司,职业,所在地 阅读全文
摘要:
原题链接:http://hihocoder.com/problemset/problem/1239 题意:给一个数列,求构成斐波那契数列的子序列有几个。 分析:我们可以在统计的过程中动态加出结果。 由于有两个1,我们需要进行一些区分,我们首先定义m[0]表示以第一个1为结尾的斐波那契数列的个数,m[ 阅读全文
摘要:
原题链接:http://hihocoder.com/problemset/problem/1227 题意:在m个点中找一个点为圆心, 求能够精确包括n个点的最小的半径,要求半径为整数。 分析:一开始没看清题意,以为是凭空的一个圆,后来才发现是m个点中的某一个,感觉自己有点sb。。 然后想到直接暴力, 阅读全文