自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (2)
  • 收藏
  • 关注

转载 C++中swap两个数组逐一交换元素而非交换指针的问题分析

摘要:之前一直想当然地认为,C++中调用swap函数交换a和b两个数组,只是将a和b两个数组的头指针交换而整个数组中元素在内存中的位置并没有变动。今天队友突然给我看了一个实验,让我大跌眼镜。经过反复的研究,得出结论——C++中调用swap函数交换数组a与数组b,实际上就是将其元素逐一交换,而非交换它们各自的头指针。详细说明与原因分析:http://www.caiyiwen.tech/article/42.html...

2020-07-11 09:57:20 2027

转载 两个命令行应用程序的交互——使用Java的Process类完成复杂控制台程序的自动化操作(以围棋GTP协议为例)

GitHub地址链接:https://github.com/zhmgczh/GTPService这个项目其实继承并发展于我的上一个项目——用模式识别实现围棋转接器的开源Java项目——一个类似GTool2.exe的工具,是一个变相的补充,主要解决如何使用Java完成两个控制台应用程序相互交流以达成交互运行目的的问题。本项目详细说明http://www.caiyiwen.tech/article/34.html...

2020-06-20 00:09:33 475

转载 用模式识别实现围棋转接器的开源Java项目——一个类似GTool2.exe的工具

(本项目目前实测可用的程序:银星围棋5、银星围棋14、MultiGo、Leela、CUSOMI围棋、……)GitHub地址链接:https://github.com/zhmgczh/GoAutomation/(内含Windows绿色版和其他平台基于JVM的jar发行版)本项目详细说明如下:http://www.caiyiwen.tech/article/GoAutomation.html...

2020-06-13 23:47:26 276

原创 Gym 101981I Magic Portion 最大流

Magic Portion贪心是一定做不出来的,需要网络流。我们建图的方法十分简单——源点与所有英雄点连一条流量为1的边,表示一个英雄只能杀初始只能杀一只怪兽;所有英雄与其所能杀的所有怪兽分别连一条流量为1的边;所有怪兽与汇点连一条流量为1的边,表示一个怪兽只能死一次。下面考虑如何处理药的问题:我们指定一个药点,从源点向药点连一条流量为药的数量的边;从药点向每个英雄连一条流量为...

2020-02-10 19:17:10 205

原创 CodeForces 343D Water Tree 树链剖分+DFS序

Water Tree这是一道树链剖分+DFS序题,较为典型且易于思考。树链剖分的经典模板就是按照DFS序建立线段树,只要在第2次DFS时顺便记录每个结点的入序和出序即可,为操作1提供了方便。操作1是把一个结点的所有子结点全部注水,这一操作即为DFS序的经典操作,这里不再赘述。操作2是把一个结点及其所有父结点的水清空,我们可以沿着重链不断攀升,每次修改一整条链,直至到达根结点为止。...

2020-02-10 19:05:29 136

原创 HDU 6621 K-th Closest Distance 主席树+二分

K-th Closest Distance这是一道简单的主席树题,思维难点在于是否想到二分。因为是要求区间[L, R]下标对应数列中的|p-ai|第k小值,如果我们设|p-ai|=x,我们只需保证区间[p-x, p+x]中正好有k个值,且p-x或p+x存在。二分答案x,将问题转化为判定性问题。我们发现,满足上述条件的x必是满足“区间[p-x, p+x]中有k个值”这一条件的x的最小值,...

2020-02-10 18:55:12 197

原创 HYSBZ 2588 Spoj 10628. Count on a tree 树链剖分+主席树

Spoj 10628. Count on a tree需要求一棵树上两点之间的第k小点权。“第k小”想到主席树,“树上两点之间”想到树链剖分。我们先对这棵树进行轻重链剖分,得到每一条重链的顶端、各结点从属的重链等信息。树链剖分完成后,下面考虑如何建立树上主席树:我们把每个结点在其父结点的基础上建立主席树即可。所以,在树链剖分的第二次DFS中,我们可以建立好主席树。下面考虑如何在主...

2020-02-10 18:28:41 174

原创 UVA 12436 Rip Van Winkle’s Code 线段树

Rip Van Winkle’s Code线段树维护等差数列,考察建模能力和多重懒标记优先级顺序。首先,我们需要看出题中所给的暴力代码实际上就是维护连续区间的等差数列加和。思考等差数列是否具有可加性:两个等差数列相加,即为首项相加并公差相加。显然,我们需要维护区间首项a,区间公差d和区间和s,区间和s作为区间的唯一连续性质,可视为线段树需要维护的值,那么剩下的性质(首项a和公差d)即视...

2020-02-10 17:43:20 128

原创 HYSBZ 3211 花神游历各国 线段树

花神游历各国这一题是线段树裸题,但是因为操作特殊,不可以区间懒标记,所以有些思维难度。我们注意到以下事实:1e9(data[i]的上限)连续进行开根号再向下取整操作5次后就变成1;1无论开多少次根号均为1。所以,我们对于一个区间的操作可以是——判断其中每一个数是否≤1,若是,则无需操作,否则对其中每一个数开根号向下取整。如何判断一个区间中每个数是否均≤1呢?维护一个区间的最大值,...

2020-02-10 17:11:05 129

原创 LightOJ 1035 Intelligent Factorial Factorization 欧拉筛

Intelligent Factorial Factorization这是一道素因数分解题。因为数据范围非常小,所以直接暴力分解即可。首先使用欧拉筛预处理出≤100(n的上界)的所有素数;然后从2-每个数用不大于它的素数进行分解,分解方法具体如下:若i%prime[j]=0,则i=i/prime[j],且将prime[j]的个数加一,循环直到i%prime[j]≠0时结束。若prim...

2020-02-07 20:56:58 93

原创 HYSBZ 3283 运算器 exBSGS+exLucas

运算器这是一道模板题,通过此题即可获得两个重要模板——exBSGS和exLucas。网上找到的模板并不稳定,经过反复调试最终确定模板如下代码。代码:#pragma GCC optimize(2)#include<cstdio>#include<cmath>#include<cstring>using namespace std;nam...

2020-02-07 20:40:03 160

原创 Gym 102452G Game Design 搜索+计数原理

G - Game Design这一题是构造题,我们必须想出一种策略可以使树上的结点数满足要求。为了简化构造难度,我们可以试图把每一个点都作为某个答案中的一个点,并且只考虑二叉树。显然,每个叶子结点都设防是满足条件的情况,我们把每个叶子结点的代价都设为1.考虑一个结点和它的两个子结点的关系,如果它的两个子结点都被防住(不一定是在子结点处设防,也可能在子结点的子结点设防),那么这个父结点就无...

2020-02-07 18:52:43 683

原创 Gym 102452D Defining Labels 数位数字提取

D - Defining Labels这一题是一个典型的进制转换题,但是如果不知如何转换,则可能做不出来。首先,我们来看一组对应:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 00, 01, 02, 03, ……, 99, 000, 001, 002, ……1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, 12, 13, 14, ……,110,111, 1...

2020-02-07 17:17:03 588

原创 Gym 102452B Binary Tree 博弈

B - Binary Tree简单的树上博弈题,考察的是透过现象看本质、不被输入带偏的能力。首先我们知道,满k层二叉树的结点数为1+2+2²+2³+……+2(k-1)=2k-1注意到上面2^k-1这个数为奇数,我们还知道,任意一个数减去一个奇数都会改变其奇偶性。(奇数-奇数=偶数,偶数-奇数=奇数)最终胜利态为0(树上结点全部拿完,沦为空树),是一个偶数。如果一棵树上有奇数个结点,那么...

2020-02-07 16:17:00 257

原创 CodeForces 922D Robot Vacuum Cleaner 排序

Robot Vacuum Cleaner这一题需要抓住产生“sh”字符串的本质思考,否则茫然无所措。我们首先想到统计每个字符串内分别有多少‘s’和‘h’(分别存在s_num和h_num数组中),为下面的贪心做准备。每个字符串自身含有的“sh”数目是固定的,与它们的顺序无关,我们考虑字符串排列顺序时不予考虑。考虑任意两个字符串a和b:我们知道如果a在b前,那么会产生s_num[a]*h_...

2020-02-07 15:50:18 120

原创 CodeForces 922B Magic Forest 打表

Magic Forest我们注意到n的上界是2500,n³=1.5625e10,n³÷1e8≈156s。如果暴力打表,可以在三分钟内完成统计。我们对1≤n≤2500预处理打表,将结果保存在常量数组中,直接输出答案即可。(0ms过题法对于数据范围不严的题目作用极佳)代码:#include<cstdio>using namespace std;const long ...

2020-02-07 15:25:51 610

原创 CodeForces 933A A Twisty Movement 前缀和

A Twisty Movement这一题最后十秒过题,很惊险刺激,但是它留给我的思考却是没有停止的。看数据范围,必须在O(n²)之内的时间完成,否则超时。很容易想到枚举一个区间的左右端点[L, R],然后将此区间反转,可是翻转之后如何统计答案又是一个O(n)问题。为什么统计答案是O(n)问题呢?因为只有1和2两种状态,我们只要预处理出一个序列的1数量的前缀和与2数量的后缀和,然后从头到...

2020-02-07 14:37:15 134

原创 CodeForces 933B A Determined Cleanup 数学

B - B给出整数p, k,问是否存在一个多项式f(x),其每项系数均为自然数且<k,且f(x)可分解为f(x)=q(x)(x+k)+p(q(x)为另一个多项式)。我们可以设q(x)=a0+a1x+a2x²+a3x³+……带入上面等式,得f(x)=(a0k+p)+(a1k+a0)x+(a2k+a1)x²+(a3k+a2)x³+……发现f(x)每项系数均为形如mk+n形式,因为每项...

2020-02-07 12:13:20 194

原创 HDU 5943 Kingdom of Obsession 二分图匹配+素数筛

Kingdom of Obsession这一题需要思维抽象能力,如果仅看到问题的表面(数论),则无从下手。问题的实质是将1, 2, 3, …, n这n个数(记为y)与s+1, s+2, s+3, … s+n这n个数(记为x)建立一一映射,并且每个映射都满足x%y=0。x%y=0可以写成x=ky (k>0, k∈N),即x为y的倍数。若s<n,则x与y有一部分相同,我们可以将...

2020-02-06 21:42:35 127

原创 HDU 5937 Equation 搜索

Equation注意到等式x+y=z中每个字母只能是一位正整数。本地预处理所有形如x+y=z的所有可能情况,共有36种。枚举这36种等式出现与否,同时更新答案。剪枝:若当前枚举到第i个等式且得到的个数为cnt,如果cnt+36-i<ans,说明再枚举下去数量也不会超过已有的最大值,应该立刻停止。代码:#include<cstdio>using namesp...

2020-02-06 20:54:35 117

原创 HDU 5936 Difference 搜索

Difference首先根据f函数的性质可知,f(y,K)的值只与y的各个数位上的数字有关,而与y值本身的大小无关。这一性质暗示可能需要枚举y的数位数字。根据数据范围进行推算,题中涉及的数的大小不超过10位。原式x=f(y,K)-y可改写为y=f(y,K)-x。枚举y的各个数字(0-9)出现的个数,总和上界为10,判断算出的y是否真的符合条件即可。代码:#include&lt...

2020-02-06 20:31:36 139

原创 HDU 5935 Car 倒序增数组

Car这一题我做了很长时间,考虑了很多情况。思维题的难度应该属于比既定算法和数据结构还要捉摸不定。我们需要让车子的速度不断递增,又需要总时间最小。首先,容易想到差分,预处理出每一段的距离:diff[0]=a[0], diff[i]=a[i]-a[i-1]这样一来我们就得到每一段的距离,贪心思想希望每一段时间越少越好,最极端的情况就是1。但是若第一段为1,则后面不可以有小于第一段长度的段...

2020-02-06 19:23:03 154

原创 HDU 5934 Bomb 强连通分量缩点

Bomb经典的诠释强联通分量例题,形象地表达了强联通分量的性质和应用。强连通分量:有向图的一个最大子图满足如下性质——任意两个点u、v,至少有一条路径可从u到达v。思路:将炸弹抽象为点,将一个炸弹可引爆另一个炸弹看做点雨点之间的边。先读入数据,然后每组炸弹判断能否建边,即可建出完整的抽象图。用Tarjan算法得出图中所有的强连通分量,然后将每个强连通分量看做一个点,重新建图。因为所有...

2020-02-06 17:44:13 147

原创 HDU 6709 Fishing Master 容斥+贪心

H - Fishing Master这道题当年打网络赛的时候是想了一个策略的,但是训练时忘了,所以重新从更加数学的角度思考了一下。思路:我们总共需要n段钓鱼的时间和n段煮鱼的时间,其总和为nk+∑ti。然而我们有重合的部分需要减去,所以实际需要的时间为——nk+∑ti-重合部分。所以问题变成如何求出最大的重合部分,我们知道显然可以完全利用的时间只有煮鱼时间ti中k的整数倍,即ti%k的那一...

2020-02-06 17:08:49 208

原创 HDU 6705 path 优先队列

D - path图论中使用优先队列的有趣题目,求一张图中第k短的路径。注意区别于“第k短路”,因为“第k短路”问题是两个定点之间的第k短,而本题没有定点。注意到第k短的路径最多只有k条边。做法:优先队列维护路径的终点、长度、终点的上一个点、终点的上一个点到终点这条边在邻接表中的编号,优先级按长度升序。预处理要将邻接表中存的边都按照权值升序排序。首先将所有简单的边作为路径放进优先队列,此...

2020-02-06 16:53:49 136

原创 HDU 6704 K-th occurrence 后缀数组+二分+主席树

C - K-th occurrence很好的后缀数组题,训练时因为还不会后缀数组,故未做,学习后缀数组后独立写出。首先第一个问题是如何找出给定子串所有出现的位置。显然,l就是给定子串的首位置,而这个子串其他出现的位置一定是sa[rank[l-1]], sa[rank[l-2]], …或sa[rank[l+1]], sa[rank[l+2]], …即我们需要找到一个[L,R]使得sa[i]...

2020-02-06 16:35:58 206

原创 HDU 6703 array 权值线段树

B - array训练时花了很久才想明白如何建模,这是因为对于权值线段树还没有足够的感觉所致。经过寒假在家中的个人训练,已经初步掌握其常见技巧。我们可以明显地看到,操作1的“+1e7”远大于n的上界,所以远大于数组中元素的上界。所以只要进行过一次操作1,这个元素已经形同虚设,失去了在操作2中的约束性。做法一 - 权值线段树:对这个array建立一个维护元素下标和区间最大值的权值线段树。每逢...

2020-02-06 16:13:53 140

ACM对拍程序(Windows)

本程序为ACM对拍的经典代码,只需要把自己写的程序放在my.c程序中并编译为my.exe,再把标准示范程序放在std.c中,编译成std.exe,再运行duipai.cmd即可。如果遇到不同的输出,会自动停下。

2019-01-31

Lunux系統安裝教程

本文档教你快速安装Linux系统,内容时效性强,且已经过众人试验,精准永恒。

2018-10-12

空空如也

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

TA关注的人

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