- 博客(215)
- 收藏
- 关注
原创 多线程初探
Java多线程的启动方法:继承Thread类实现Runnable接口匿名类的方式先来看看多线程的威力如何,后续才有动力用读取文件来测试:给出一个文件夹,统计文件夹里的所有包含字符串str的文件个数两种办法:第一种是普通做法,递归查询,找到文件后就地查第二种是多线程做法,也是递归查询,找到文件后为它新建一个查询线程,然后继续向下查查了一个小文件夹:普通程序:...
2019-12-23 20:37:55
315
原创 Uva674_Coin Change
题意:用1、5、10、25、50 这五个面值的钱币去凑给定的金额n,问有多少种方案思路:定义状态: d(i, j)表示用前 i 种面值凑 j 共有多少种不同的方案初始状态:题目规定0金额有1种,d(1-5, 0) = 1;前1中面值的凑法只有1种:d(1, 1-n) = 1;状态转移:当j < a[i], d(i, j) = d(i - 1, j - 1);当j >...
2019-11-08 16:27:07
234
原创 LCS模板_uva10405
LCS:i = 0或j = 0, f(i, j) = 0;f(i, j) = f(i-1, j-1) + 1, a[i] = b[j];f(i, j) = max(f(i, j-1), f(i-1, j));#include <cstdio>#include <cstring>#include <algorithm>using namespac...
2019-11-08 15:12:56
225
原创 半数集问题FZU1207
问题:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下。(1)n∈set(n);(2)在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3)按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6个元素。注意 半数集不是多重集。集合中已经有的元素不再添加到集合中。编程任务对于...
2019-11-02 10:38:59
283
原创 Gray码
Gray码:格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一 的二进制转化为Gray码:简便的算法:二进制数右移一位,最高为补零,之后与原二进制值按位异或得到格雷码//二进制--->Gray码 int binary2gray(int b){ return b ^ (b >> 1);}Gray码转为二进制://Gray码...
2019-10-31 12:14:23
2669
原创 二叉树遍历次序的转换
前序+中序------>后序取前序的第一个节点,一定是根节点,在中序中找对应的下标m,将中序序列分为[l,m-1]和[m+1, r]两个子序列,分别对应左子树和右子树,继续取第二个前序节点,应该是左子树的根节点(如果左子树存在),在[l, m-1]中找到其下标,继续二分…中序+后序------>前序后序的最后的节点一定是根节点,为方便,可先将其反转,与上面同理#include ...
2019-10-30 22:03:52
292
原创 线性时间选择
问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素法1:randomizedSelect思想:改编随机快速排序,不用把整个数组全部排序,而是选择的排序(更快)时间复杂度:(1)在最坏情况下,算法randomizedSelect需要O(n^2)计算时间例如要找最小的元素,但是每次进行Partition函数划分时得到的位置总是很大(靠近n)(即总是在最...
2019-10-28 14:46:58
493
原创 汉诺塔(非递归)
算法:假设塔座a,b,c排成一个三角形,a->b->c->a构成顺时针循环。在移动圆盘的过程中,若是奇数次移动,则将最小的圆盘移动到顺时针方向的下一个塔座上,若是偶数次移动,则保持最小圆盘不动,而在其他两座塔座之间,将较小的圆盘移动到另一个塔座上去#include <cstdio>#include <cstring>#include <sta...
2019-10-24 16:42:52
438
原创 最大间隙问题
问题描述:最大间隙问题:给定n 个实数x1, x2 ,…, xn,求这n 个数在实轴上相邻2 个数之间的最大差值。假设对任何实数的下取整函数耗O(1),设计解最大间隙问题的线性时间算法。对于给定的n 个实数x1,x2,…,xn,编程计算它们的最大间隙input.txt52.3 3.1 7.5 1.5 6.3output.txt3.2思路:线性时间求解,所以不能排序来做。鸽舍原理...
2019-10-24 15:03:00
1482
原创 金币阵列问题
问题描述:有m*n枚金币在桌面上排列成一个m行n列的金币阵列。每一枚金币或正面朝上,或背面朝上。用数字表示金币状态,0表示正面朝上,1表示背面朝上。金币阵列游戏的规则是:(1)每次将任一行金币翻过来放在原来的位置上。(2)每次可以任选2列,交换这2列金币的位置。任务:给定金币的初始状态和目标状态,编程计算按金币游戏规则,将金币排列从初始状态变换到目标状态所需的最少变换次数。解题思路:本...
2019-10-24 11:23:10
1510
6
原创 最多约数问题(二)
题意:最多约数问题:正整数x的约数是能整除x的正整数。正整数x 的约数个数记为div(x)。例如,1,2,5,10 都是正整数10 的约数,且div(10)=4。设a 和b 是2 个正整数,a≤b,找出a和b之间约数个数最多的数x及其最多约数个数。思路:以[a,b]区间的数为单位, 暴力依次找出[a,b]每个数的约数个数以质因子为单位,搜索每个落在区间[a,b]的数的约数个数第二种的...
2019-10-16 09:46:09
2204
原创 路由器简单配置
网络拓扑图:可参考:传送门Router0的配置:配置端口:配置静态RIP:添加完后就出现这两行了,这两行指明了路由表的跳转信息:要找172.16.0.0/24网段的ip,则下一跳去192.168.0.2要找200.100.50.0/24网段,下一跳去192.168.0.2Router1的配置配置端口:配置RIP:测试PC0-----》PC1PC0-----》P...
2019-10-12 11:32:57
268
原创 反素数
先介绍一下求某个数的约数个数的算法对于pi,有(ai+1)种取法:pi^0, pi^1, pi^2 … pi^ai,一共(a1+1)*(a2+1)…种取法,每种取法都代表一个约数,结果即约数的个数。反素数定义对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i) < g(x),则称x为...
2019-10-11 22:18:59
536
原创 统计数字问题
首先容易想到暴力法,即对每个数字拆解,计数,但是当n很大时很慢.优化后的算法可以达到O(logn)的复杂度,明显好于暴力,具体参考:点这里#include <cstdio>#include <cstring>#include <cmath>#include <ctime>using namespace std;int ans1[10]...
2019-10-10 20:35:02
462
原创 Java无法加载主类
主要是两点:java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我们忽略了package的影响。直接看:解决办法
2019-09-26 12:43:10
387
原创 POJ3154——GraveYard(思维)
题意:在一个周长为10000的圆上等距分布着n个雕塑。现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周上均匀分布。这就需要移动其中一些原有的雕塑。要求n个雕塑移动的总距离尽量小。思路:因为位置都是相对的,所以我们可以假设其中一个雕塑不动,以它为基准点。在圆周上刻出n+m个等间距的点(包含基准点),让其余n-1个点选择离自己最近的点,这样最优。这里的距离是等比例的距离,...
2019-09-21 15:04:06
248
原创 Uva11300_分金币(思维)
题意:环形排列的n(n<=106)个人,每人有一定量的金币。每个人可以给左右相邻的两个人金币,最终使得每个人都有相同量的金币。求被转手的最小金币数。思路:感觉很复杂,解决起来非常巧妙,书上讲的很好,懒得写了,摘一段别人的|x1 - Ci|的几何意义是数轴上一点x1到Ci的距离。所以问题转化为:给定数轴上n个点,找出一个到他们的距离之和最小的点。这个点就是这些数中最中间的点。#...
2019-09-21 14:01:31
257
原创 POJ1568_Find the Winning Move(α-β剪枝)
题意:相当于四子棋,给出一个4x4的棋局的局面,问先手 “x” 是不是能找在接下来的一步中找到一个必胜局面,如果有,输出 ‘x’ 下一步下子的坐标(行列都由 0 开始);否则输出字符串 “#####”。思路:参看了这里的代码第一次写博弈,看看别人的写法,先模仿,实践一下~#include <cstdio>using namespace std;char G[5][5];...
2019-09-20 21:16:28
767
原创 SPOJ_10628_Count on a tree(树上第k大)
题意:给出一棵树,树上每个节点都有权值,有m个询问,求u到v的路径上第k大的数。思路:树上的第k大值,跟区间第k大有些不同,区间第k大每个值在前一个值的基础上新建一棵树,而树上第k大则是在父亲节点的基础上新建一棵树,子节点的主席树都是从底下根节点累加出来的查询的时候,答案就是root[v] + root[u] - root[lca(v, u)] - root[fa[lca(v,u)]]上的...
2019-09-12 19:28:40
209
原创 Hdu4348_To the moon(主席树)
题意:一个长度为n的数组,4种操作 :(1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 。(2)Q l r:查询当前时间戳区间[l,r]中所有数的和 。(3)H l r t:查询时间戳t区间[l,r]的和 。(4)B t:将当前时间戳置为t 。思路:对于每一次区间加法都新建节点建一棵线段树,加法不用向下更新,懒惰标记最后加上就行了,查询的话就是某个根节点的线段树...
2019-09-10 20:52:24
216
原创 Hdu6278_Just h-index(主席树)
题意:给n个数,q次询问,每次询问给出一个区间[l,r],要你求出最大的h,使得在[l,r]这个区间内满足,至少有h个数的值大于等于h。思路:主席树可以求区间[l, r]的第k小,这里改造一下,求区间[l, r]中比val小的数有多少个。设区间内>=h的个数为w,题意是要w >= h。所以二分h,h的范围是[1, r-l+1],每次求出>=h的数有多少个,比较,继续二分。...
2019-09-10 20:40:50
251
原创 ZOJ2112——Dynamic Rankings(动态第k小)
题意:n个数,q个询问 (n<=50000, q<=10000)Q x y z 代表询问[x, y]区间里的第z小的数C x y 代表将(从左往右数)第x个数变成y思路:树状数组套主席树先建立一颗静态的主席树,将初始值依次插入并建树。所谓静态指:可以查询,不在这颗树上进行修改操作。对于修改操作,另外建一批主席树,每个树管理一个位置(即1-n)的权值信息,1-n位置的...
2019-09-08 09:08:12
212
原创 SPOJ3267——D-query(主席树)
题意:输入N个数字,查询区间[L,R]中有多少个不同的数字思路:主席树每个位置上保存一个值。保存每个数的位置信息,如果这个数没有出现过,当前位置+1,如果出现过,将之前出现的位置-1,当前位置+1#include <cstdio>#include <cstring>#include <algorithm>using namespace std;...
2019-09-05 17:03:15
197
原创 Hdu2104(主席树)
主席树入门可直接看上面的博客,下面的可以不看,自己总结的主席树是一种可持久化线段树,所谓可持久化就是可保存历史版本。例如让你往权值线段树中依次插入一列数,在你插入完所有数之后询问在你插入第x个数之后所有数中第k大的是多少?这就需要你记录每个时刻的线段树,最暴力也是最容易想到的方法是每次插入一个数之前再建一棵线段树复制上一时刻的线段树,然后再在新建的树上插入。但这样不仅占很大空间还很费时间。这个...
2019-08-28 22:29:17
340
原创 Hdu5249_KPI(权值线段树)
题意:每组数据第一行有一个n(1≤n≤10000),代表服务记录数。接下来有n行,每一行有3种形式“in x”: 代表重要值为x(0≤x≤109)的请求被推进管道。“out”: 代表服务拉取了管道头部的请求。"query: 代表我想知道当前管道内请求重要值的中间值. 那就是说,如果当前管道内有m条请求, 我想知道,升序排序后第floor(m/2)+1th 条请求的重要值.为了让题目简单...
2019-08-28 17:31:46
252
原创 BZOJ3224_yvj 1728 普通平衡树(权值线段树)
题意:您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入x数删除x数(若有多个相同的数,因只删除一个)查询x数的排名(若有多个相同的数,因输出最小的排名)查询排名为x的数求x的前驱(前驱定义为小于x,且最大的数)求x的后继(后继定义为大于x,且最小的数)思路:平衡树还不会,后面补上。先用权值线段树来做。权值线段树不了解的先看:权值线段树插入删...
2019-08-28 16:38:46
244
原创 POJ3667_Hotel(线段树区间合并)
题意:酒店有n个房间,两种操作:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边2 a b:将[a,a+b-1]的房间清空思路:核心:维护每个区间的最大空余长度是多少。需要3个变量:ls[i]:左端点向右连续最多有多少空房子rs[i]:右端点向左连续最多有多少空房子Tree[i]:整个区间最多连续有多少空房子Tree[i] = max(rs[i * 2]+ls[i *...
2019-08-26 21:37:49
920
原创 Hdu4417_Super Mario(线段树+离线处理or划分树+二分)
题意:给n个数,数中有重复的。有m个询问,问的是[L,R] 区间内有多少个数小于等于h思路:线段树+离线处理这个题用线段树要离线处理(我试了一下在线的,超时了)。先在原数组中存入n个高度和下标,按高度升序排序。对于m此询问,先存储下来,注意存下标,然后按照高度升序排序。由于高度是从小到大的,没读入一个高度,在原数组里找所有比所查询高度小的,将他们在原数组中的下标置为1,然后就是线段树区...
2019-08-26 21:27:56
193
原创 POJ2104_K-th number
题意:给n个数,m次询问s,t,k,每次问[s, t]区间的第k大数思路:暴力:排一次序,然后对于每次的询问[s, t],从头开始找那些在[s, t]的数(需要提前记录在原数组的下标),并用cnt计数,当cnt=k时就是该区间的第k大数。#include <cstdio>#include <cstring>#include <algorithm>...
2019-08-24 17:42:02
239
原创 Hdu4199_Colourful Rectangle(多色矩形面积并)
题意:给n个矩形,每个矩形是R、G、B三种颜色中的一种,三种颜色的混合可以得到7种颜色分别为R, G, B, RG, RB, GB, RGB。求每种颜色的面积。思路:红,绿,蓝分别用001, 010, 100表示,混色用位运算|上即可。线段树每个节点都记录每种颜色的有效长度,向上更新到根节点,这样每次根据根节点各颜色的长度*高度来累加到各颜色的面积中即可。#include <cst...
2019-08-23 22:52:38
217
原创 Hdu1828_Picture(线段树矩形周长并)
题意:矩形周长并(轮廓线长度)思路:我们可以分开求,周长分为x轴上的和y轴上的从下往上扫描,首先看x轴的边,第一条边我们可以直接加出贡献,如果第二条边我们和第一条有覆盖部分,那么我们要怎么加呢,我们会发现要加的也就是 ( 加入这条边后的有效长度和没加之前的有效长度的差值),只要加入一条边使得整个有效长度变化了(变大或变小),都说明它没有被其他边完全覆盖掉,它有一部分是露出来的,所以它对总...
2019-08-23 22:42:42
238
原创 Hdu1255_覆盖的面积(线段树)
题意:给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积.思路:参考大佬直到要改这个pushup函数,但理解不够改不出,参考了大佬的博客。#include <cstdio>#include <cstring>#include <algorithm>#define lson l, mid, root<<1#define r...
2019-08-22 15:45:06
148
原创 Hdu3265_Posters(线段树矩形面积并)
题意:求矩形面积并,有个变化就是每个矩形里都有一个矩形的洞。思路:每个矩形有个空心,那就把每个矩形分成4个小矩形。转化为矩形的面积并。#include <cstdio>#include <cstring>#include <algorithm>#define lson l, mid, root<<1#define rson mid, ...
2019-08-22 14:27:38
268
原创 Hdu4391_Paint The Wall(线段树+剪枝)
题意:刷墙, 以开始 有 n个节点,每个节点有一种颜色 ,m 次询问2种操作:如果 a=1 :将 l到 r 刷为 z 颜色如果 a=2 :询问 l 到 r 有 多少个 和 z 相同的 节点思路:刚开始没有剪枝,线段树每个节点就存当前区间的颜色,如果当前区间的颜色都一样,都存颜色,否则存为-1(杂色),查询的时候从上到下统计信息。但是这样做太慢了,直接超时。当查询一中颜色c的时候,我...
2019-08-22 10:27:51
392
原创 Hdu1542_Atlantis(扫描线+线段树求矩形面积并)
题意:给你n个矩形的左下角坐标和右上角坐标,求矩形相交的面积。思路:先学习一下矩形面积并。矩形面积并就是把这一堆矩形切分成不同的矩形条来处理,每个矩形条的高度就是相邻矩形条的高度之差,而长度就是当前扫描线经过的这些矩形的长度和(用线段树来统计),长度*高度就是这一小块的面积,这样一条一条处理,最终一大块不规则的图形就处理完了。参考:https://blog.csdn.net/WhereI...
2019-08-21 21:05:44
219
原创 POJ3277(线段树+扫描线/矩形面积并)
题意:给你n个矩形的左下角坐标和右上角坐标,求矩形相并的面积。思路:扫描线法,从下往上扫描。把每个建筑的底部看做一个边,其高度为0,1来记录下边。剩下的就是矩形面积并了。#include <cstdio>#include <cstring>#include <algorithm>#define lson l, mid, root<<1...
2019-08-21 21:05:00
211
原创 Hdu3308--LCIS(线段树区间合并)
题意:给你n个数,m个操作。操作有两种:1.U x y 将数组第x位变为y (下标从0开始)2. Q x y 问数组第x位到第y位连续最长子序列的长度。对于每次询问,输出一个答案思路:线段树单点修改区间合并对于每个区间节点维护3个值:ls[root]:以区间左端点开始的最长连续上升序列长度(前缀序列)rs[root]:以区间右端点结束的最长连续上升序列长度(后缀序列)Tree[...
2019-08-19 19:05:12
211
原创 Hdu4027(线段树开根号区间求和)
题意:给定100000个数,两种操作,0 i j表示将i j这段的数字都开根号(向下取整)1 i j表示查询i j之间的所有值的和所有的和都不超过64位思路:如果直接用线段树更新会tle,此题的关键是要理解对任何64位以内的值,开根号最多不会超过7次,所以用线段树做,更新到叶子节点的次数最多7次,如果叶子节点已经更新为1了,那么再开根号也不会变了。#include <cstdi...
2019-08-19 09:48:59
563
原创 Hdu5023_A Corrupt Mayor's Performance Art(线段树区间染色+区间查询)
题意:一块色板上只能做两件事:1. “P A B C” 指在A到 B 号方格中涂上颜色 C。2. “Q A B” 指老师的提问:A到 B号方格中有哪几种颜色。初始时全部涂成2号颜色。思路:常规的线段树区间染色。#include <cstdio>#include <cstring>#include <algorithm>#define lson ro...
2019-08-18 20:39:43
243
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人