自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ttoobne

冲就完啦

  • 博客(59)
  • 收藏
  • 关注

原创 Linux云主机部署搭建minecraft服务器以及记录java内存溢出问题

好朋友找我玩minecraft,正好之前租了一台腾讯云学生主机,主机配置一般,不过感觉几个人玩minecraft应该还是能撑得住,果断搞起,回想当年一起联机的快乐,瞬间兴奋了起来因为有一个好朋友在美利坚,所以我本来以为带宽会是一个大问题,事实证明带宽问题不大,内存问题很大… 本来玩的好好的,突然服务器说挂就挂,一查发现是Out of memory,搞得心态炸裂本文简单记录一下搭建minecraft服务器和尝试解决内存溢出问题的过程服务器配置:1核 2G内存 60GSSD 带宽6Mbps操作系统:Ce

2021-08-21 00:10:22 3495 2

原创 UNIX Socket网络编程:自己动手实现并发 http 服务器

开源链接:https://github.com/ttoobne/bohttpd:(一)整体设计: 主循环采用多路复用,如果连接到达则集中accept,在已连接描述符上如果有就绪事件,则分配任务给线程池执行I/O操作。已连接描述符和监听描述符都设置为非阻塞。1. 为什么用线程池? 如果每个连接到达就 create 一个新的线程,并发量较大的情况下创建和销毁线程的开销不可忽视,并且如果创建的线程数量没有限制,将会消耗大量 CPU 资源用来切换线程。这时如果采用线程池预...

2020-07-08 14:48:45 445

原创 POJ1742 Coins (可行性背包)

题目链接题解:看到面试题和这个很像,好像是挺经典的一个问题,定义一个 sum 数组代表第 i 枚硬币在达到硬币总数为j 的时候使用了几枚,然后就可以控制硬币的使用次数了。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ...

2020-03-25 23:30:32 234

原创 Codeforces Round #418 (Div. 2) C. An impassioned circulation of affection (DP)

题目链接题解:简单DP, dp[ch][ i ][ j ] 表示到第 i 位为止填了 j 个 ch 字母空位的最长连续长度,如果用 ans[ch][i] 表示 ch 字母至多填 i 次空位的最大连续长度,则 dp 数组可以省去一维。#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef...

2019-11-03 20:09:42 208

原创 牛客练习赛37B 筱玛的排列(字典树 + dfs)

题目链接题解:由于 nnn 最大有 20,那所有从 1 到 n 的情况有 C2nnC_{2n}^nC2nn​ 种情况,肯定不能暴力搜索,那么我们可以把图分成两个部分来搜索,分别从 (1,1)(1,1)(1,1) , (n,n)(n,n)(n,n) 开始走 nnn 步到对角线上,然后用字典树求最大异或和就行啦。代码:#include <bits/stdc++.h>using n...

2019-09-12 22:18:09 160

原创 2019南京网络赛 D. Robots(概率DP与拓扑排序)

题目链接在做这道题之前看一个简化版:绿豆蛙的归宿设 F[x]F[x]F[x] 表示从 xxx 走到终点所经过的路径的期望长度。若从 xxx 出发有 kkk 条边,分别到达 y1,y2...yky_1,y_2...y_ky1​,y2​...yk​ ,边长分别为 z1,z2...zkz_1,z_2...z_kz1​,z2​...zk​ ,则根据数学期望的定义和性质,有: F[x]=1k∗∑i=1k...

2019-09-07 21:54:28 247

原创 BZOJ-3674 可持久化并查集加强版 (主席树+并查集按秩合并)

题目链接题解:主席树维护并查集的 father 数组以及它的历史状态。我觉得比较难搞得是按秩合并,我看网上其他人的代码觉得合并的好奇怪,然后我按照自己的想法合并觉得更奇怪,但是最奇怪的是它竟然过了?!我怀疑是不是数据水了,然后去 洛谷 和 acwing 交了一下,竟然都过了?这里由于按秩合并优化是不影响答案的正确性的,所以我合并部分的正确与否先保留。(因为我觉得我合并时会将以前的版本中的节...

2019-09-03 12:16:50 166

原创 HDU6704 CCPC网络赛 K-th occurrence (后缀数组 + ST表 + 主席树)

添加链接描述题解:一般这种和子串有关的都能扯到后缀数组,由于要找一个子串第 k 个出现的位置,所以先确定范围,一个子串若在原串中出现 x 次,那么这 x 个以该子串开头的后缀一定在所有的后缀中排名是连续的,并且在这些区间内所有的后缀的前缀都是该子串。所以就可以先求出后缀数组 sa 和 lcp 的 height 数组,接着对于每次查询先二分该子串所在排名的满足条件的最左区间与最右区间,可以用ST...

2019-08-24 21:26:57 200

原创 HDU6705 CCPC网络赛 path

题目链接题解:直接优先队列 bfs 会因为边数太多而 MLE,所以考虑一下减少放入队列的边。首先将每个点边权最小的出边加入优先队列,然后 bfs 时每 pop 出一条边就将出点是这条边的点的下一条出边压入队列,同时将连接这条边的最短的边也压入队列进行 bfs 即可。代码:#include <bits/stdc++.h>using namespace std;typede...

2019-08-24 14:11:06 278

原创 HDU6703 CCPC-网络赛 1002 array (主席树 + set)/(权值线段树)

题目链接题解:由于序列所有元素都是唯一的,在 1 ~ n 的范围内。可以用主席树维护权值,查询在树中 ala_lal​ 到 ara_rar​ 区间大于等于 k 的最小的数,但是还有操作 1。操作 1 可以视为为操作 2 提供答案(因为加了一个很大的值,查询保证 k≤nk\leq nk≤n,那加了之后的值就查不到了),这样的话进行操作 1 ,就将 aposa_{pos}apos​ 插入 set...

2019-08-23 21:51:37 363 5

原创 2019牛客暑期多校训练营(第三场)G Removing Stones (分治+RMQ)

题目链接题解:如果一段区间它满足 max(l,r)≤⌊sum(l,r)/2⌋max(l, r)\leq \lfloor sum(l, r)/2\rfloormax(l,r)≤⌊sum(l,r)/2⌋,则代表这个区间符合要求。那我们就可以对这个区间进行分治,分为最大值左边的区间和最大值右边的区间。那么包括最大值的区间怎么办呢?我们可以枚举长度较小的那个区间的值作为一个端点,二分查找另外一个区间...

2019-08-23 10:37:57 183

原创 2019牛客暑期多校训练营(第四场)I string(后缀数组 + 回文树)

题目链接题解:如果求出 字符串中不同的子串数量 和 反转后的字符串中不同子串的数量,那么两种的字符串合在一起之后的不同的字符串数量再 / 2 就是答案。但是如果原来的字符串是回文串的话,那么回文串本来应该要计算两次的,但是发现它只计算了一次,所以要加上回文串的数量再 / 2。具体做法,求不同子串的数量可以用后缀数组,先将原字符串反转加在后面,中间用一个其他字符隔开。回文子串个数可以用回文树...

2019-08-22 11:08:05 179

原创 CodeForces - 786B (线段树?优化建图最短路)

题目链接题解:这道题太神仙了!由于有整个区间指向点的边和点指向一整个区间的边,所以边数它爆炸了。那么怎么样可以将边数减下来呢?这里以一个点连向一个区间的点为例子,我们可以建立一颗线段树,每个点代表一个区间,每个区间连一条边到它的各个子区间,边权为 0 ,然后将叶子节点连向各个原始的节点。那么要增加一个点连向一个区间的边就变成了这个点连向这个区间所包含的线段树中的节点即可。同样,增加一个区...

2019-08-21 15:25:08 188

原创 hdu 5521 (虚点?优化建图最短路)

题目链接题解:由于图中一个区块就是一个完全图,那么最坏的情况下有O(n2)O(n^2)O(n2)条边!但是,每个完全图的边权值都相同,那么可以将一个完全图的O(n2)O(n^2)O(n2)边巧妙地减为O(n)O(n)O(n)条!具体的,在每个完全图中间可以新加一个虚点,将通往虚点的边权值设为 0 ,将虚点的出边设置为原来完全图中各边的权值,那么就可以在减少边的同时保证这个完全图中每个点到另...

2019-08-20 19:54:49 262

原创 线段树yy (线段树维护等比数列的和)

没有题目链接一个长度为 n 的序列,Q 次操作:对于区间 l 到 r 的所有位置 i,a[i]+=bi−la[i]+=b^{i - l}a[i]+=bi−l求区间 l 到 r 的和 mod 1e9 + 7对于所有操作,b 不变。(1 <= n, Q <= 1e5, 1 < b <= 1e9)题解:由于每次加的是一个等比数列,那么可以将等比数列的首项作为下传标...

2019-08-16 14:42:33 775 1

原创 2019牛客暑期多校训练营(第九场)H Cutting Bamboos(二分+主席树)

题目链接题解:我们可以二分砍到的高度,那么怎么求 L 到 R 区间内一个高度能砍掉的竹子呢?那么可以用一颗可持久化线段树来使区间的高度变得有序。具体的,用主席树维护区间的高度之和与区间每个高度出现的次数。每次可以计算出高于二分高度的和 sum 与出现次数 num,那么剪掉的部分就是 sum - 二分的高度 * num 。那么就直接二分了。代码:#include <bit...

2019-08-16 08:44:53 181

原创 线段树yy(线段树维护括号序列+LCA)

没有题目链接一颗有 n 个节点的树,q 组询问,支持两种操作:1.单点修改 2.路径求和。(1 <= n, Q <= 1e5)题解:用 dfs 建出树的括号序列(好像也叫欧拉序),用基本的线段树维护这个括号序列,每个点在括号序列中为左括号时在线段树中加上该点权值,为右括号的位置减去该点权值,那么在一条路径中从起始点左括号到终点左括号一定包含路径中的每个点,并且不包含不再路径...

2019-08-15 09:18:11 447

原创 2019牛客暑期多校训练营(第八场)D Distance (三维树状数组)

题目链接题解:求最小曼哈顿距离,可以用给定范围的最大立方体的八个顶点建立八个树状数组,分别维护距离该顶点的曼哈顿距离的最大值。出题人给的正解不是这种方法,效率更高,但是树状数组常数很小,也能达到令人满意的时间消耗。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;...

2019-08-14 08:40:05 203

原创 2019牛客暑期多校训练营(第七场)H Pair(数位dp)

题目链接题解:数位dp。有两个限制条件,需要枚举两个数字,那么 dp 需要开五个维度,分别是 位数、第一个限制条件的状态 (0 代表不满足,1 代表可能满足,2 代表满足)、第二个限制条件的状态、第一个数字的该位二进制值、第二个数字的该位二进制值。那么接下来就是经典的数位 dp 了,要注意减去 x 为0 或者 y 为 0 的情况。代码:#include <bits/s...

2019-08-13 19:06:20 153

原创 2019牛客暑期多校训练营(第七场)E Find the median (线段树维护离散化后的区间)

题目链接题解:由于区间范围较大,考虑离线将区间离散化,那么可以利用线段树存左闭右开区间,每次更新时为两个操作:将 L~ R - 1 区间更新,将 R 单点更新。代码:#include <bits/stdc++.h>using namespace std; typedef long long ll;typedef unsigned long long ull;...

2019-08-12 21:02:28 171 1

原创 2019牛客暑期多校训练营(第八场)A All-one Matrices(单调栈)

题目链接题解:先求出每列与每行的前缀和,然后逐行计算答案。具体的,枚举每行每个点,单调栈求出以该点往上的高度往左往右能够扩展的左右边界 L 和 R。然后判断该点下一行的 L 到 R 之间是不是都被 1 占满,如果不是,则答案加一。由于每个矩形底边的元素都会重复计算一次,则用哈希去重即可。代码:#include <bits/stdc++.h>using nam...

2019-08-12 14:36:20 246

原创 CodeForces - 840D Destiny (主席树)

题目链接题解:由于每次查询的符合条件的数字不会达到k 个(k <= 5),所以大胆用主席树暴力往下左右子树都查符合条件的解即可。每次查询时间复杂度O(k*logn)。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long...

2019-08-11 11:22:02 329

原创 杭电多校第六场 E Snowy Smile (线段树维护二维最大子段和)

题目链接题解:枚举上下边界,用线段树维护区间最大子段和。具体的,首先枚举下界,固定下界的情况下,上界的枚举与计算答案并更新可以 O(n) 完成。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;#define...

2019-08-09 19:52:40 312

原创 poj 3667 (线段树区间合并)

题意:一家旅馆共有N个房间,这N个房间是连成一排的,标号为1-N。现在有很多旅客以组为单位前来入住,每组旅客的数量可以用DiDi来表示。旅店的业务分为两种,入住和退房:1、旅客入住时,第i组旅客需要根据他们的人数DiDi,给他们安排DiDi个连续的房间,并且房间号要尽可能的小。如果房间不够,则无法安排。2、旅客退房时,第i组旅客的账单将包含两个参数XiXi和DiDi,你需要将房...

2019-08-07 17:23:42 389 1

原创 POJ 1417(带权并查集 + dp 记录路径)

题意:一个岛上存在着两种居民,一种是天神,一种是恶魔。天神永远都不会说假话,而恶魔永远都不会说真话。岛上的每一个成员都有一个整数编号(类似于身份证号,用以区分每个成员)。现在你拥有n次提问的机会,但是问题的内容只能是向其中一个居民询问另一个居民是否是天神,请你根据收集的回答判断各个居民的身份。题解:不难发现,如果输入 a b yes 则表示 a 与 b 在同一个种族, a ...

2019-08-07 09:48:59 288

原创 AcWing 97. 约数之和 (费马小定理 / 矩阵快速幂 / 分治)

题目链接一个数 A 的约数之和可以由分解质因数求得,一个质因数 p 在 A 中出现 c 次,那么对于一个约数 X ,X 中 p 出现的次数一定为 0次 ~ c次,所以对于每个 p 可以构造一个等比数列 1 + p + p^2 + p^3 + ...... +p^c,最后将所有的等比数列之和乘起来即可。即 ans = ans * sum(p[i], c[p[i]]) %mod; 其中 p[i]...

2019-06-06 20:31:12 1274 3

原创 校赛题解

A.CQW又迟到了水题。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define int ll#define INF 0x3f3f3f3f3f3f3f3f#define fastio ios::sync_with_stdio(false), cin.tie(0)cons...

2019-05-13 19:39:12 257

原创 P2704 [NOI2001]炮兵阵地 (状压DP)

题目链接题解:设dp方程 dp[id][j][i] = max(dp[id][j][i], dp[id-1][k][j] + no[i].num) 为要考虑上一行和上上行。数组全开会炸内存,用滚动数组,滚三行即可。代码:%:pragma GCC optimize(3)#include <algorithm>#include <iostream>#...

2019-05-10 10:11:51 183

原创 P1220 关路灯 (区间dp)

题目链接题解:在关完路灯 i~j 时,老张要么在 i 处,要么在 j 处。1. 要么是在关完 j 路灯后再回头关 i 路灯的,要么是在关完第 i+1 盏后继续前进关掉 i 的,在这两种情况中选择耗能最小的。2. 要么是在关完 i 路灯后再回头关 j 路灯的,要么是在关完第 j-1 盏后继续前进关掉 j 的,在这两种情况中选择耗能最小的。因此设 dp[i][j][1] 表示在关完...

2019-05-10 10:10:20 217 1

原创 洛谷P1247 取火柴游戏 (Nim博弈)

题目链接题解:Nim博弈,每一堆石子的SG函数即他本身,异或一下答案为非零即为先手必胜态,反之先手必败。接下来计算第一次取的石子个数。异或完的答案 ans 。ans 的二进制最高位 k,原数组中一定至少有一个数 a 的该位为 1 ,找到一个这样的数将 ans 二进制为 1 的位在 a 中取反,得到的数就是能够使得原数组所有数异或之后结果为 0 的数。题外:基础的Nim...

2019-05-02 19:37:25 364

原创 Codeforces Gym - 101982C (dp)

题目链接题意:给 n 个数,求出 选 k 个不同的数有几种选择方法, 结果对998244353取模。题解:dp[i][j] 存的是 i 种数中选 j 个数的情况种数。预先处理出有几种数并且每种数有几个。那么 i种数中选 j 个数的情况数量可以由第 i 种数选或者不选推得。即 dp[i][j] = dp[i-1][j] + dp[i-1][j-1] * num[i]。(n...

2019-04-27 14:13:50 490

原创 POJ-1149 PIGS (网络流巧妙建图)

题目链接题意:有M个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了N个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。问总共最多能卖出多少头猪。(1 <= N <= 100, 1 <= M <= 100...

2019-04-27 14:01:49 257

原创 洛谷 P2765 魔术球问题 (网络流 + 思维)

题目链接题意:给你 n 根柱子,需要往上放小球,小球的编号从 1 开始(1,2,3 ...),要使得每两个相邻的球之和为平方数(4, 9, 16 ...),问最多可以放多少个小球。题解:从 1 开始,一个一个地加入小球,每个小球分为两个点,一个点由源点流向它,容量为 1 ,另一个点由它流向汇点,容量也为 1 。那么每次加入一个点,如果能够和之前加入的数构成平方数,则将这个数的第一个...

2019-04-27 13:49:37 2495

原创 南昌网络赛 Max answer(单调栈 + 线段树维护前缀和最大最小值)

题目链接题意:给一串序列,要求选任意连续的一段区间,使得这一段区间中最小值乘以区间总和尽量大。题解:首先先单调栈求出每个数字作为最小值所在的区间。如果数据范围只有正数那么只用单调栈就可以解决,但是数据有负数,那么怎么高效查询使得总乘积最大的区间呢?那么这时候我们可以用线段树维护前缀和的最大最小值,要使得负数乘以一个数尽量大,那么这个数就得尽量小。前缀和能够 O(1) 的...

2019-04-24 09:36:21 462

原创 Codeforces Gym - 101808K(倍增LCA最近公共祖先)

题目链接题意:给 n 个点,n 条边(3 <= n <= 100000),q 次询问,每次求 u 到 v 之间的最短路。没有重边和自环。题解:显然 O(n2logn) 是会超时的。由于只给了n条边,那么去掉一条边就是一棵树了。这时可以用LCA求解。我看这位大佬的代码学的。用并查集即可将成环的一条边从图中除去。之后的每次查询只需要判断经过这条边和不经过这条边哪个更小...

2019-04-18 14:46:08 234

原创 Codeforces Round #551 (Div. 2)D. Serval and Rooted Tree (树形dp 思维)

题目链接题意:给你一颗以 1 为根的树,树的形状确定,每个节点有一个类型 0 或 1,0 代表该点的权值取其儿子中权值最小的那一个,1 则反之。所有的叶子节点权值为 1 - m(m为叶子节点数量),但是并不知道每个叶子节点的具体权值。最后要求出根(即节点1)的权值最大可能是多少。题解:由于叶子节点的权值是不确定的,所以按照普通的递推是行不通的,那么我们可以按照 该节点最大可以排第几...

2019-04-17 14:29:20 171

原创 洛谷P2158 [SDOI2008]仪仗队 (线性筛欧拉函数求前缀和)

题目链接题解:由题意可知,从左下角的点到其他所有点连成的不同斜率的边数即为所求。要求得边长 y / x 不同的数量( y < x),则求与 x 互质的数的个数 *2+3 即可(因为只求出了一个三角形的答案数量,需要*2来求正方形矩阵的答案数量,+3是有三个特殊的边,即两条 y / x == 0 以及一条 y / x == 1)。由于边长为 n的边的答案包含了边长为 n - 1 的边...

2019-04-17 09:45:50 291

原创 洛谷P1726 上白泽慧音 (强连通分量 Korasaju算法)

题目链接首先建图时多建一个反向边的图。vector<int> G[MAXN], rG[MAXN];算法的核心就是跑两遍 dfs:第一遍 dfs 求出从一个点开始遍历图回溯时所得到的后序序列(必须是后序,试过不是后序就会错。至于为什么,能力不足实在是研究了好久没研究出来,而且网上的博客也只是讲了要求后序而没有讲为什么)。第二遍对反向边生成的图 dfs ,从记录的后序...

2019-03-28 20:17:03 293

原创 带权并查集

以前写过带权并查集的题目,自己琢磨半天判断了很多情况,最后终于能过题了,但是写法之麻烦实在是没法保证再写一次也不会出错。看网上的博客才发现能够有简单许多的方法来搞定带权并查集。首先就是获取祖先的函数,这个函数中与普通的并查集唯一的不同之处就是更新 dis 数组的部分,dis 中存的为该点到其祖先的距离。int get_root(int x){ if(father[x] == x...

2019-03-27 15:32:12 477

原创 洛谷P1113 杂务 (拓扑排序求最长路)

题目链接拓扑排序:首先将图中入度为 0 的点压入队列中,每次从队列中 pop 出一个点并将该点所连接的点入度都减一,若入度减到 0 则压入队列,直到队列为空,那么将每一次 pop 出的点记录下来就是该图的拓扑排序。如果要求字典序最小将队列改为优先队列即可。求最长路:动态规划 设当前队列中 pop 出的点为 u ,与 u 连接的点 v ,那么 dis[v] = max(dis[v], dis...

2019-03-25 18:06:57 539

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除