- 博客(334)
- 资源 (5)
- 收藏
- 关注
原创 uvalive 3026 Period (前缀最短循环节)
给一个长度为n的字符串S,求其每一个前缀的最短循环节(若存在)对于串S,利用KMP算法求一下Next数组根据next数组的含义,设当前前缀长度为i,若这i个字符组成周期串,则i-next[i]恰好为其周期串的最长长度。#include#include#include#include#includetypedef long long LL;using name
2015-09-18 19:12:33
505
原创 uva 11732 "strcmp()" Anyone?(字典树)
给n个字符串,问两两比较字典序大小,总共所需比较次数。将所有字符串依次插入字典树里面。记val[i]表示经过结点i的字符串数目,End[i]表示以结点i结尾的字符串数目。则每次插入时,可以知道当前结点已经经过的字符串数目,结果累加2*val[i],到最后一个结点时,累加之前以当前结点结尾的字符串数目。注意,一开始插入的时候需要比较s[0]和t[0],即一开始两个字符串就存在
2015-09-18 12:42:49
363
原创 hdu 5439 Aggregated Counting(找规律)
题目大意:一个序列1、2、2、3、3、4、4、4、5、5、5……第i项的数a[i]表示连续的i的个数,依次下去。现给出n(n规律:last[last[n]]=a[1]+a[2]+……+a[last[n]]。比如last[3]=5,则last[5]为序列的前5项的和,为11知道了这个还不能算,因为n太大了。再对上式进行归纳整理,可以得到:last[last[n]]
2015-09-16 13:29:25
598
原创 hdu 5437 Alisha’s Party (优先队列)
题目大意:n个客人,k次开门:每次已到达人数为t[i]时开门,让q[i]个人进入(礼物价值高的优先进入,相同则先到达的优先),k次之后,若还有剩下的客人,则再开一次门,按规则全部进入。q次询问:第q[i]个进入的客人姓名。1、将k次开门按照人数从低到高排一下序。2、按照先后到达次序,依次将客人放入队列中,队列中的元素满足:价值高的靠前、价值相同的先到达的靠前。3、每当队列中
2015-09-15 15:27:43
402
转载 shodan搜索引擎介绍
from:http://www.exploit-db.com/wp-content/themes/exploit/docs/33859.pdf0x00 概要这篇文章可以作为渗透测试人员和安全工作者运用Shodan搜索引擎的指南,同时有助于理解其工作原理和达到安全审计目的。文章也列举出找到大量有风险的互联网服务及其设备的步骤和方法。同时介绍了Shodan能用初级筛选语法以及Shoda
2015-09-15 11:02:48
2149
原创 hdu 5442 Favorite Donut (最大表示法+KMP)
题目大意:给一个字符串,求它的循环最大表示开始位置,以及方向。1、可用最大表示法求出顺时针的最大表示的最小开始位置,记为p1。利用该位置求出顺时针的最大表示字符串,记为s12、然后将字符串倒置,再用一次最大表示法。注意此时求出来的位置p其实是下标最大的开始位置p2,即p2=n-(p+1)+1。但可利用该位置求出逆时针的最大表示字符串,记为s23、将倒置的字符串扩充至2倍长度,利用KM
2015-09-15 09:02:17
715
1
原创 hdu 5443 water problem (RMQ)
裸的RMQ问题。#include#include#includeusing namespace std;#define maxn 1000001int f[20][maxn];void init(int n){ int i,j,k; for(j=1;(1<<j)<=n;++j) { k=1<<(j-1); for(i
2015-09-14 18:26:01
495
原创 hdu 5444 Elven Postman (DFS)
读懂题意就是个水题了。给一棵树,左儿子权值大于其父亲,右儿子权值小于其父亲。给出若干询问,输出从根节点到指定节点的路径。#include#include#includeusing namespace std;struct Node{ int l,r;}p[1001];void add(int u,int a){ if(p[u].l==0&&
2015-09-14 17:42:40
648
1
原创 hdu 5446 Unknown Treasure (Lucas定理+CRT+快速乘)
题目大意:给k个素数pi,记M为其乘积。计算C(n,m)%M。1、令a[i]=C(n,m)%pi,可用Lucas定理进行计算。2、问题转化为求最小的x,使得x%pi=ai。根据CRT求解即可。3、注意在应用CRT的时候,中间结果会溢出,需要用到快速乘法。#include #include #include using namespace std;type
2015-09-14 11:53:42
459
原创 hdu 5441 Travel(离线+并查集)
给一个无向带权图,再给出q个询问x,统计图中满足下面条件的点对个数:(a,b)和(b,a)为不同点对1、存在a到b路径。2、路径上边权均不超过x比较容易想到下面的解法:1、将q个询问从小到大排序。2、依次访问每个询问x,每次将边权值不超过x的边的两个顶点进行合并。3、统计每一个合并后的块中顶点个数num,结果累加num*(num-1)但是这样做会
2015-09-13 20:20:43
689
1
原创 hdu 5438 Ponds(toposort+DFS)
给一个无向图,将图中与其关联的边数小于2的点去掉,直到找不到这样的点为止,然后求奇圈的权值和。类似拓扑排序将度数小于2的点给去掉,然后剩下的点必然组成若干个圈,通过DFS标记边的同时统计顶点个数。若为奇圈,累加权值即可。注意数据范围啊。#include#include#include#include#include#include#includeusi
2015-09-13 20:02:51
427
原创 uvalive 3942 Remember the Word (字典树+DP)
给S个不同的单词和一个长字符串,问将其分解为若干个单词有多少种方法(单词可重复使用)解法:设dp[i]表示以i开头的字符串分解的方法数。状态转移方程:dp[i]=sum(dp[i+len(x)]),x为S[i……L]的前缀。将每一个单词插入到字典树中,然后考虑长字符串S的每一个后缀s[i……L], 看其前缀x是否在字典树中出现,每出现一次,dp[i]累加dp[i+len(x
2015-09-12 21:35:07
572
原创 软件安全学习笔记(7):PE文件总体格式
1、MS-DOS MZ文件头(64个字节)定位PE文件头开始位置,也用于PE文件合法性检测。最后四个字节(3C处):PE文件头开始位置2、DOS Stub一段小的DOS程序3、PE header:由字串(Signature)、影像文件头(FileHeader)、可选映像头(OptionalHeader)三部分组成(1)字串:四个字节,值为50h,45h,
2015-09-11 21:08:18
864
原创 软件安全学习笔记(6):NTFS文件系统
一、总体结构1个引导扇区+15个扇区的NTLDR区域+MFT元数据文件+MFT分配的空间+文件存储区说明:引导扇区将NTLDR的代码读入内存并移交控制权。MFT是一个与文件相对应的文件属性数据库,以文件数组来实现,每个文件记录大小固定为1KB,它记录了除文件数据外的所有属性,甚至小文件的数据本身也包含在MFT中。二、引导分区前3个字节:跳转指令再8个字节:生产厂
2015-09-11 13:28:45
662
原创 软件安全学习笔记(5):FAT32文件系统与数据恢复
一、FAT32文件系统结构1、引导扇区:描述分区大小、簇的大小、FAT表个数与大小、分区引导程序等。2、FAT(文件分配表)FAT1+FAT2:记录数据存储区每一个簇的使用情况,形成每个文件的簇链表3、数据存储区:存储两类数据:目录项、文件数据二、几个概念1、簇:文件系统将磁盘以一定数量的扇区为单位进行划分,这样的单位称为簇。是文件空间分配的最小单位。2、FAT
2015-09-10 10:25:20
2457
1
原创 软件安全学习笔记(4):磁盘的物理逻辑结构
一、硬盘物理结构:1、外部结构:接口(数据和电源)、控制电路、固定面板接口:并口(PATA)、串口(SATA),并口速度较慢、串口速度快固定面板:保证硬盘盘片和机构稳定运行。2、内部结构:盘片、主轴、磁头、磁头控制器、数据转换盘等二、逻辑结构1、寻址方式chs参数寻址:柱面(Cylinders):由多个盘片的半径均为R的同心圆形成。取值:0-10
2015-09-08 13:02:08
688
原创 软件安全学习笔记(3):Windows内存结构和管理
一、CPU特权级与内存访问虚拟内存中用户模式区和内核模式区对应,处理器也分为用户模式(Ring 3)和内核模式(Ring 0)用户程序一般运行在用户模式,其访问内存空间也局限于用户区操作系统内核代码(如系统服务和设备趋同程序),则运行在内核模式,可以访问所有内存空间,使用所有处理器指令二、用户内存用户区是每个进程真正独立的可用内存空间,运行中的大部分数据都保存在这里。
2015-09-07 21:42:55
462
原创 软件安全学习笔记(2):80x86处理器的工作模式
实模式:80x86处理器在复位或加电时是以实模式启动的。寻址方式:20位、1M空间不能对内存进行分页管理不支持优先级,所有指令工作在特权级(优先级0)可切换到保护模式保护模式:是80x86处理器的常态工作模式寻址方式:32位,物理寻址空间达4G支持内存分页机制,为虚拟内存提供良好支持支持优先级机制,根据任务特性进行运行环境隔离可切换到实模式(通过
2015-09-07 18:49:34
931
原创 软件安全学习笔记(1):系统引导与控制权
一、计算机系统引导过程:1、主板BIOS系统进行硬件自检 BIOS:基本输入输出系统,存储在主板BIOS Flash(或者ROM)芯片,为计算机提供最底层的最直接的硬件设置。 BIOS的自检和初始化:检测系统中的关键设备(内存、显卡等)是否存在和能否正常工作,进行初始化并将控制权交给后续引导程序。2、硬盘主引导程序(MBR) 硬盘主引导扇区:位于硬盘第一个扇区
2015-09-07 18:36:30
2274
原创 CCF 201409-4 最优配餐(BFS)
问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。 方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路
2015-09-06 19:27:01
1302
1
原创 CCF 201412-4 最优灌溉(MST)
问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。 现在雷雷知道哪些麦田之间可以建设水渠和建设每个水渠所需要的费用(注意不是所有麦田之间都可以建立
2015-09-06 16:32:57
978
原创 hdu 5430 reflect (欧拉函数)
从一个圆上一点发射光线,问反射N次后恰好第一次回到起点的发射方案数。主要说一下为什么K/(N+1)需要是一个既约分数。设g=gcd(K,N+1),k=K/g,n=(N+1)/g,即有g*(2*θ*n)=g*(2*k*Pi),即相当于反射n-1次回到起点g次。这样,如果g!=1,是不符合题意的。关于欧拉函数#include using namespace s
2015-09-06 07:21:11
449
原创 hdu 5428 the factor(分解质因子)
给一个序列,设所有项乘积为a,求a的因子中因子个数大于2的最小因子。将每个数分解质因子,记录每个质因子的个数。然后从最小的质因子开始取(累乘),直到取够两个(因为1和其本身也是该数的因子),此时得到的结果就是满足条件的最小因子。#include#include#include#include#include#include#define INF 0x
2015-09-06 06:34:27
479
原创 hdu 5429 Geometric Progression (等比数列判定+大数模板)
给一个序列判定是否是等比数列。坑点:首项可以是0,此时其余项必须全为0才是等比数列扒了个比较好用的大数模板,几乎可以和int一样使用。#include #include using namespace std;#define DIGIT 4 //四位隔开,即万进制#define DEPTH 10000 //万进制#
2015-09-06 06:26:55
483
原创 CCF 201409-3 字符串匹配 (KMP)
问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成。 第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感
2015-09-05 18:23:17
684
原创 CCF 201503-4 网络延时 (树的直径)
问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机与交换机、交换机与电脑之间使用网络连接。交换机按层级设置,编号为1的交换机为根交换机,层级为1。其他的交换机都连接到一台比自己上一层的交换机上,其层级为对应交换机的层级加1。所有的终端电脑都直接连接到交换机上。 当信息在电脑、交换机之间传递时,每一步只能通过自己传递到自己所连接的另一台电脑或交换机。请问,电脑与电脑之间
2015-09-04 20:24:16
2754
原创 CCF 201403-4 无线网络 (二维最短路)
问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。 除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置中选择至多 k 个增设新的路由器。 你的目标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽量少的中转路由器。请问在最优方案下中转路由器的最少个数是多少?
2015-09-04 20:20:05
3858
8
原创 CCF 201403-3 命令行选项 (恶心的模拟)
问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。 选项有两类:带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"
2015-09-04 20:13:23
3014
1
原创 CCF 201312-4 有趣的数 (数位DP)
问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 3. 最高位数字不为0。 因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。 请计算恰好有n位的有趣的数的个数。由于答案可能
2015-09-04 19:57:39
1502
原创 CCF 201312-5 I’m stuck!(BFS)
问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此方格; '+': 当玩家到达这一方格后,下一步可以向上下左右四个方向相邻的任意一个非'#'方格移动一格; '-': 当玩家到达这一方格后,下一步可以向左右两个方向相邻的一个非'#'
2015-09-04 19:06:40
3109
原创 poj 2763 Housewife Wind (LCA转RMQ+树状数组)
题意:给一棵树,两种操作:1、求两点间路径长度2、修改某条路径长度。对于操作1,先求两点的LCA,设d[i]为结点i到根结点的距离,那么两点路径长度就等于d[u]+d[c]-2*d[lca(u,v)],求LCA可转化为RMQ来求。对于操作2,考虑修改之后对操作1的影响,即修改之后,会使得以该边的某一个端点为根的子树中所有结点的d发生变化。用L[u],R[u]分别表示结点
2015-09-01 11:10:55
491
原创 hdu 5424 Rikka with Graph II (哈密顿路判定)
给一个n条边,n个顶点的图,判定是否存在哈密顿路。如果存在哈密顿路,此时路径中含有n-1条边,剩下的那一条要么是自环(这里不予考虑,因为哈密顿路必然不经过),要么连接任意两个点。不考虑自环,此时图中的点度数为1的个数必然不超过2个,有如下三种情况:1、剩下的那条边连接起点和终点,此时所有点度数都是2,可以从任意一个顶点开始进行DFS,看能否找到哈密顿路2、剩下的那条边连接除起点
2015-08-29 22:23:32
1176
原创 hdu 5423 Rikka with Tree
问题描述众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:对于一棵树TTT,令F(T,i)F(T,i)F(T,i)为点1到点iii的最短距离(边长是1). 两棵树AAA和BBB是相似的当且仅当他们顶点数相同且对于任意的iii都有F(A,i)=F(B,i)F(A,i)=F(B,i)F(A,i)=F(B,i).两棵树AAA和BBB是不同的当且仅当他们
2015-08-29 21:59:44
703
原创 hdu 3078 Network (LCA转RMQ)
题意:n个结点形成一棵树,每个结点有一个权值,两种操作:一、改变某个结点的权值。二、查询结点u到结点v的路径上第k大的权值。由于牵涉修改操作,因此不便用离线tarjan来做,这里采用LCA转RMQ的方法来求LCA。关于LCA与RMQ的相互转换建树之后DFS求出各个结点的深度dep、欧拉序列E、第一次在欧拉序列中出现的位置pos、以及前驱结点pre。然后可转化为RMQ
2015-08-29 14:51:02
533
转载 LCA倍增法
LCA-倍增法(在线)O(nlogn)-O(logn)1. DFS预处理出所有节点的深度和父节点inline void dfs(int u){ int i; for(i=head[u];i!=-1;i=next[i]) { if (!deep[to[i]]) { d
2015-08-28 09:28:27
463
原创 hdu 2874 Connections between citie(离线tarjan求LCA 前向星)
给一个森林,询问某两点之间的路径长度。由于所给图不存在父子关系,因此根据输入建立无向边。任选一个未访问的顶点作为某棵树的根节点开始进行DFS,注意DFS前vis数组必须清0。为什么选择前向星?因为用vector邻接表会爆内存。#include#include#include#include#include#include#include#include
2015-08-27 10:05:20
434
原创 hdu 2586 How far away ?(离线tarjan求LCA)
n座房子由n-1条道路连接,形成一棵树。给出道路长度,进行m个询问:两个房子间路径长度)树中不存在父子关系,因此建立无向边。选择任意一个结点(房子)作为根节点进行DFS,传入一个参数w表示该结点距离根节点的距离。同时开设一个数组d,用来记录各个结点到根节点的距离。那么对于查询的两个点u,v,其路径长度就等于d[u]+d[v]-d[LCA(u,v)]*2#include#i
2015-08-26 18:33:10
368
原创 poj 1330 Defragment (最近公共祖先)
给出一棵树的父子关系,求指定的两个结点的最近公共祖先。关于最近公共祖先(LCA)的资料如下:资料1LCA问题的tarjan算法由于存在父子关系,因此建图的时候建立的是有向边,在进行dfs前,需要找到根节点(入度为0),从该结点开始DFS。#include#include#include#include#include#include#incl
2015-08-26 18:25:36
430
转载 最近公共祖先(LCA)详解
LCA问题(Least Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两个顶点u和v的最近公共祖先,即找一个节点,同时是u和v的祖先,并且深度尽可能大(尽可能远离树根)。LCA问题有很多解法:线段树、Tarjan算法、跳表、RMQ与LCA互相转化等。本文主要讲解Tarjan算法的原理及详细实现。
2015-08-26 11:09:12
3699
原创 poj 3648 wedding(2-sat 拓扑排序输出方案)
题意怪怪的,还不给输入规模_(:3 」∠)_,听说数据也是水的。。。。。n对夫妇,从0开始编号,其中0号为新郎和新娘,分别坐在两端。给出m对关系(i,j),i和j不能一起坐在新娘对面,这n对夫妇中任意一对不能坐在同一端。输出与新娘在同一端的其他n-1个人。建图:首先将0(新娘)和新郎(1)连一条边,表示新娘和新郎必须坐在不同端。然后对于关系(i,j),连接 2i->2j+1,2j-
2015-08-25 19:32:52
685
MFC开发的多功能高精度计算器(含源码
2015-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人