自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ZOJ 3328 Searching the String (AC自动机)

题目大意输入一个文本串和若干模板串。统计每个模板串在文本串中出现的次数。模板串有0和1两种类型,0型在文本串中可以重叠,1型的不可以重叠。分析把所有模板串建成一个AC自动机求出字典树上所有串以0型和1型在文本串种出现的次数,即cnt[i][j]表示根节点到节点i的串在文本串中以类型j出现的次数wordend[i]表示第i个模板串的在字典树的最后一个节点所以 ans[i] = cnt[w

2015-09-22 19:58:54 268

原创 HDU 3336 Count the string (KMP + DP)

题目大意一个长度为n的字符串,求它的所有前缀在串中出现的次数和,并取模10007分析该题等价于 求每一个前缀,所包含的前缀和,比如对于串abab,前缀a包含a,前缀ab包含ab,前缀aba包含a , aba ,前缀abab包含前缀ab , abab,所以总和为6。对字符串预处理,求出它的失败函数f。dp[i]表示前缀i-1的前缀数量,则dp[i] = dp[f[i]]。 答案即为所有dp[

2015-09-21 18:57:37 312

原创 HDU 5446 Unknown Treasure (Lucas + 中国剩余定理)

题目大意求 C(m,n) % (p1 * p2 * … *pk)其中,( 1 ≤ m ≤ n ≤ 10^18 ,1 ≤ k ≤ 10 ),M = p1 ⋅ p2 ⋅⋅⋅ pk ≤ 10^18 and pi ≤ 10^5,pi 是素数。分析由于是对大组合数取模,且n 和 m 均大于10^5,所以很容易想到Lucas定理,但Lucas定理的模数p要求是一个素数, 且只能处理p < 10^5.因

2015-09-17 20:30:04 584

原创 HDU 5441 Travel (并查集)

题目大意n个点m条边的无向图,给出每条边的权值,给出q次询问,每次给出一个值,求用到所有边权不大于这个值的边的情况下,能够互相到达的点对的个数。分析给m条边的权值和查询的值都从小到大排序然后对于每个查询,把不大于这个值的边加入到并查集中去,并记录第一个比查询值大的边的标号,下次查询从此标号开始即可。因此,每条边只需遍历一次。sum[i]表示以节点i为根的子树拥有根节点的个数,因此对于每个查询的

2015-09-16 19:45:24 316

原创 POJ 2992 Divisors (快速求阶乘的素因子)

题目意思很明确, 就是求C(k , n) (0 ≤ k ≤ n ≤ 431)的因子个数,保证答案不会超long long。很容易想到用唯一分解定理来求解 , 想办法将C(k , n)变为 p1^e1 * p2^e2 * ... * pn^en那么很容易得出它的因子个数为 (1 + e1) * (1 + e2) * ... * (1 + en)由于 C(k , n) = n! /

2015-09-10 13:28:35 643

原创 HDU 1452 Happy 2004 (唯一分解定理 + 求等比数列前n项和)

题目大意:先求2004^X 的因子和sum , 然后求sum%29.同POJ 1845 类似。 先将2004分解成素数的乘积。然后对于2004^X , 改写成 p1^(q1*X) * p2^(q2*X) * ... * pn^(qn*X)从而知道2004^X的因子的和为 (1+p1+p1^2+...+p1^(q1*X)) * (1+p2+p2^2+...+p2^(q2*X)) * .

2015-09-10 00:09:18 361

原创 POJ 1845 Sumdiv (唯一分解定理+求等比数列前n项和)

题目大意:先求出A^B(0 <= A,B <= 50000000)的因数之和sum, 然后求sum % 9901的值。由于A,B的取值范围很大, 所以直接运算肯定不行。唯一分解定理任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积所以 A = p1^q1 * p2^q2 * …… * pn^qn(pi为素数) 从而 A^B = (p1^q1 * p2^q2 * …

2015-09-09 23:41:35 874

原创 HDU 1323 Perfection (水题)

题目大意:输入一系列数,以0结尾。最多100个 且每个数最大不超过60000. 然后求出每个数的所有真因子(即不包括本身的因子)之和。由于 , 数据比较小, 可以直接暴力来解,另外注意输出格式即可。代码#include <iostream>#include <iomanip>using namespace std;const int maxn = 110;int main(){ int

2015-09-09 17:09:21 493

原创 HDU 3864 D_num (求因子个数)

题目大意: 给一个数 N(1<=N<10^18), 判断它的因子个数是否为4 , 若为4,输出除1之外的三个, 否则输出is not a D_num由于N很大, 一个个除来找因子时间复杂度太多。因此,用Miller-Rabin算法和pollard_rho 算法求因子个数。直接套用模板, 得到N的所有素因子。然后稍加判断即可。代码#include <iostream>#include <cstdli

2015-09-09 14:44:53 524

原创 POJ 1811 Prime Test (大素数判断和素因子分解)

给你一个数N(2 <= N < 2^54) ,若N是素数 , 输出Prime, 否则输出最小的素因子。由于N很大,所以只能先用Miller_Rabin算法进行素数判断,然后用Pollard_rho分解因子。Miller-Rabin算法本质上是一种概率算法,存在误判的可能性,但是出错的概率非常小。出错的概率到底是多少,存在严格的理论推导。费尔马小定理 如果p是质数且(a,p)=1,则有a^p−1

2015-09-09 13:40:41 858

原创 POJ Pseudoprime numbers (判断素数+快速幂取模)

题目大意:给两个数 p 和 a , 判断 p 是不是基于 a 伪素数。伪素数:如果n是一个正整数且是非素数,如果存在和n互素的正整数a满足 a^(n-1) ≡ 1(mod n),我们说n是基于a的伪素数。如果一个数是伪素数,那么它几乎肯定是素数。所以 , 首先判断p是不是素数 , 然后用快速幂取模求出(a^p)%a的值是否等于a。代码/* 先判断 p 是否是素数 * 然后用幂取模判断(a^p) %

2015-09-08 19:56:58 820

原创 POJ Apple Tree (树状数组 + dfs序)

题目大意:给你一颗 n 个结点的树 , 结点编号为1 , 2 , … , n 。 以 1 作为根节点。每个结点的值初始化为1 , 然后有 q 种操作 。 1. C x 表示将结点 x 的值取反(即 0 变 1 , 1 变 0) 2. Q x 表示查询以结点 x 为根结点的子树的值得总和 其中 , n 和 q 的最大值都是10W.这个题一开始的想法是直接在树上进行操作, 每个结点维护以

2015-09-06 10:52:33 447

原创 POJ Ultra-QuickSort (树状数组+离散化)

题目大意:给定 n 个互不相同的数, 求将这 n 个数按升序排列所需最少交换次数 , 每次只能交换相邻的两个数。 也就是说求这 n 个数的逆序数之和 , 即对于每个数求在它之前有多少个比它大的数。很容易想到用树状数组来求逆序数 , 对于每个数a[i] , 只需求出在此之前a[i] - 1 的前缀和即可。因此需要的空间大小最大是max{a[i]}, 而这个题目中a[i]最大为10亿 , 明显不能开这么

2015-09-01 23:37:49 322

原创 POJ Matrix ( 二维树状数组)

题目大意:给你一个N * N的矩阵A,有Q次操作; 1. C x1 y1 x2 y2 ,将(x1 , y1) (x2 , y2)包含的子矩阵的数值翻转,即0变1 , 1 变0 2. Q x y , 查询A[x][y]的值。由于N最大是1000 , Q最大是10000 , 暴力的话肯定是直接超时。 后来听说是用树状数组来写的,用二维树状数组记录每个点变化的次数。每次更新一个二维区间,查询一

2015-09-01 21:44:12 772

原创 HDU Color the ball (树状数组)

HDU Color the ball (树状数组)题目大意:输入一个数N,表示有N个气球,编号为1 , 2 ,...... , N,然后有N次操作,每次操作输入两个数a , b。表示给编号为[a , b]所在区间的气球染色, 然后依次求出每个气球被染色的次数。很容易想到用线段树来求解(成段修改区间值,单点查询),也可以用树状数组来写。 不过很有意思的是, 树状数组一般是用于单点修改,查询区间和的问

2015-09-01 18:55:57 615

原创 <七> Linux 文件与目录管理

1.  目录的相关操作:cd (Change Directory)      pwd (Print Working Directory)mkdir (make directory)rmdir (remove directory)2. 环境变量 PATH当我们在运行一个命令的时候,举例来说『ls』好了,系统会依照PATH的配置去每个PATH

2015-07-17 20:37:22 612

转载 Linux术语全称

来源:http://www.91linux.com/html/article/go/20090205/15634.htmlbin = BINaries (binary) /dev = devices /etc = ETCetera etcetera附加的人, 附加物, 以及其它, 等等 /lib = LIBrary /proc = PROCesses /sbin = Sup

2015-06-20 18:30:18 438

原创 <二> Linux如何学习

1.  计算器概论与硬件相关知识2.  先从 Linux的安装与指令学起3.  Linux操作系统的基础技能:『使用者、群组的概念』、『权限的概念』,『程序的定义』等等。4.  务必学会vi文书编辑器:vi会被很多软件所呼叫,加上所有的Unix like系统上面都有vi。5.  Shell与Shell Script的学习6.  一定要会软件管理员:玩 Linux常常会面临得要自

2015-06-14 23:49:25 436

原创 <一> Linux是什么

1.     Linux其实就是一个操作系统最底层的核心及其提供的核心工具。他是GNU GPL授权模式,所以,任何人均可取得原始码与可执行这个核心秳序,并且可以修改。此外,因为 Linux参考 POSIX设计规范,于是兼容于Unix操作系统,敀亦可称之为Unix Like的一种。2.     Unix的历史:①1965年,Bell,MIT与GE共同发起了Multics的计划,但在1969年

2015-06-14 23:32:10 2125

原创 <五>首次登陆与在线求助 man page

1.  ~ 符号代表的是『用户的家目录』,# 代表root ,$ 代表一般用户。2.   文本模式登入后所取得的程序被称为壳(Shell)。3.   指令的下达方式: [vbird@www ~]$ command [-options] parameter1 parameter2... 指令 选项参数(1) 参数(2) ① 一行指令中第一个输入的部分绝对是『指令(command)』或『

2015-06-14 20:19:21 584

原创 <六> Linux 的文件权限与目录配置

1.在Linux里面,任何一个文件都具有『User, Group及Others』三种身份的个别权限。以王三毛为例,王三毛这个『文件』的User为王三毛,他属于王大毛这个Group, 而张小猪相对于王三毛,则只是一个『others』而已。无所不能的天神则是root。       在我们Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root的相关信息

2015-06-14 04:09:01 917

原创 HDU 1547 Bubble Shooter

题意:这个题就是一个泡泡龙消除泡泡的游戏,只要新发射的泡泡所处在的位置,与其相邻且包括其自身同种颜色的泡泡数>=3时,就可被消去。消去之后,那些没有与第一层直接或间接相连的泡泡也会被消去。输入:有多组测试案例,首先输入4个整数H,W,h,w。H和W代表总区域的高度和宽度,h,w代表新发射出来的泡泡所在的位置。然后接下来输入H行字符串,奇数行有w个字符,偶数行有w-1个字母(可观察图片),其中'

2015-03-06 16:26:32 521

原创 HDU2222 Keywords Search

题意:给你n个字符串以及一个字符串text,求这n个字符串中有几个在text中出现过。这是一个典型的多串匹配问题,直接使用AC自动机的模板就行。但这个题有点值得注意的地方,就是它的数据特别大,所以在输入时使用cin会超时,我就在这里WA了20多次。#include #include #include #include #include using namespace s

2015-03-04 13:14:36 352

原创 HDU1298 T9

题意:简便使用手机9键输入英文单词,给你一个字典以及字典中每个单词出现的可能性,按单词出现的可能性,在你按下某些键的组合时,自动给你调出最可能出现的单词。输入:首先输入一个数t,表示有t组测试案列,然后再输入一个数w(0值得注意的是:可能性是可以累加的。比如输入:hell 3hello 4idea 8next 8super 3那么你输入435561时就会依次出现 i i

2015-03-02 22:07:16 496

原创 HDU_1015 Safecracker

题目大意:输入一个数target和一个全是大写字母的字符串s(1由题意很容易的想到用深搜,而且不用任何剪枝,可以说是很简单的一个搜索。主要就是在s中搜索任意5个字母的组合t,然后计算num,在判断num和target是否相等以及t是否最大。遍历完s中所有5个字母的组合后,就可以输出了。#include #include #include #include usin

2015-02-27 22:31:27 798

原创 HDU1024 Max Sum Plus Plus

题目大意: 输入 m,n,然后再输入n个数,求这n个数分成m个不相交的段所得的最大和,即求m个最大子段和问题。这个题目可以用dp来解:状态dp[j]表示前j个元素,加上第j个元素时,分成i段的和的最大值决策:第j个元素时独立成组还是在第i组中状态转移方程:dp[j]=max(dp[j-1]+a[j],max(dp[k])+a[j])  max(dp[k])=buff[j

2015-02-19 11:10:01 423

原创 <三>主机规划与磁盘分区

1.      在Linux系统中,每个装置(具有某种独立功能的部件)都被当成一个档案来对待,每个装置都会有装置文件名。dev(device driver 设备驱动程序)2.      磁盘的第一个扇区主要记录了两个重要的信息,分别是: (1)主要启动记录区(MasterBoot Record, MBR):可以安装开机管理程序的地方,有 446 bytes (2)磁盘分区表(par

2014-12-18 11:49:03 502

原创 POJ1953 World Cup Noise

题目大意:输入一个数n,然后判断一个只由0和1组成的长度为n的序列,其中没有相邻1的序列有多少种。很水的一道数学题,可以用排列排列组合(插空法)做,也可以用递推的方法。我用的是递推的方法:若末尾为0,则可添加0或1(两种)若末尾为1,则只可添加0(一种)#include using namespace std;int main(){ int t,n,k=1;

2014-12-16 23:33:26 1099

原创 scan算法

#include#includeusing namespace std;#define MAXN 10000int main(){    int track[MAXN],n,s,k;    cout    cin>>n;    cout    for(int i=0;i>track[i];    for(int i=0;i        for(in

2014-12-11 21:16:17 5046

转载 C++什么是对象?

对象就像是我们生活中的每个实体(如人、钢笔等等)对象的抽象叫做类,打个比方说,人是一个类,你我是这个类的实体对象。对象有数据,就像我们的身高、体重,就是类里的各种变量。对象有动作,比如我们可以吃饭、行走,就是类里的成员函数。对象的数据多是private(私有)的,通过成员函数(多为public)来访问他。这就是类对数据的封装性。人还分为男人和女人,然后再根据年龄分为老人、小

2014-11-05 20:29:00 1042

原创 POJ2551 Ones

题目来源:http://poj.org/problem?id=2551

2014-09-09 12:55:11 581

原创 HDU1789 Doing Homework again

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1789这道题的大概意思就是

2014-09-09 02:08:58 608

转载 单源最短路径算法 Bellman-Ford && SPFA 及 最短路算法统一归纳

为避免各种求最短路的方法混淆,开始之前先做个归纳。 ① BFS - 无权图 (有向或无向,有环或无环)- 对于树的bfs,无需判重,因为根本不会重复。对于图的bfs,要有vis[]进行判重,不然一个点可能被多次拓展,极大地浪费时间空间。② dp - 有向无环图(DAG,带权或不带权)- 很多问题可以转换成DAG上的最短路(当然还有最长路)问题,这个时候,一个点就是一个状态,

2014-07-18 16:55:05 816

转载 STL系列之二 stack栈

栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个

2014-07-09 20:18:39 489

转载 C/C++的64位整型输入输出

在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf(“%I64d”,a),和cout 本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种

2014-06-12 16:19:52 4351

转载 凸包问题 —— Graham扫描法

凸包问题 —— Graham扫描法:(1)找出点集p[]中最左下的点p1,把p1同点集中其他各点用线段连接,并计算这些线段与水平线的夹角,然后按夹角从小到大和按到p1的距离从近到远排序(夹角范围为 [0, 180)度,而且可以删除相同夹角且距离p1较近的点,保留最远点,这样可减少计算量。因为直线上的非端点不是凸包的极点,即如果p1,p2,p3在一条直线上,则只取凸点p1,p3。p2不在端点,故

2014-04-18 13:04:51 545

转载 算法入门---判断集合S中是否存在两个其和等于x的元素

请给出一个运行时间为O(n lgn)的算法,使之在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。思路一 :我们最容易想到的是O(n2)的算法,大致伪码即:1 findX(A, x){2     for i=0 to length[A] {3         key = A[i]4             for j

2014-03-30 16:35:54 770

求点到线段的距离

求点到线段的距离

2014-03-20

C++计算机和常用到的一些函数

ACM计算几何:求叉积,点积,两点间的距离,点是否在线段上,点到线段的距离,判断两条线段是否相交,线段与直线的位置关系等等

2014-03-20

空空如也

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

TA关注的人

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