ACM之数据结构
文章平均质量分 82
少年少年少年奋斗奋斗奋斗
不积跬步,无以至千里
展开
-
树状数组略解
今天比赛的时候好多树状数组的题,这里总结一下树状数组的用处。 首先不得不说树状数组的思想简洁而又深刻,短短几行代码,诠释了什么叫“大道至简”,我想算法的魅力或许就在于此。今天比赛的时候,看似简单的题总是超时,当时就敏锐的想到用树状数组解决,然而由于不太熟悉,自己又在本子上推了一遍,最后还是有几道题没来得及看,现在赶紧回来总结一下树状数组。(纯手打,不容易!)先讲讲树状数组的用处转载 2017-08-07 16:17:49 · 282 阅读 · 0 评论 -
xynuoj 1793 Binary String Matching
1793: Binary String Matching时间限制: 3 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a sub...原创 2018-04-12 16:16:55 · 170 阅读 · 0 评论 -
xynuoj 1843 小猴子下落
1843: 小猴子下落时间限制: 3 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴...原创 2018-04-12 17:01:56 · 196 阅读 · 0 评论 -
XYNUOJ 1863 汉诺塔(三)
1863: 汉诺塔(三)时间限制: 3 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,...原创 2018-04-12 19:18:58 · 193 阅读 · 0 评论 -
RMQ问题 ST算法
1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,下面介绍一下解决这两种问题的比较高效的算法。当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),...转载 2018-04-13 10:17:01 · 198 阅读 · 0 评论 -
xynuoj 1883 士兵杀敌(三)
1883: 士兵杀敌(三)时间限制: 2 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀...原创 2018-04-13 12:55:28 · 173 阅读 · 0 评论 -
xynuoj 1886 士兵杀敌(四)
1886: 士兵杀敌(四)时间限制: 2 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是在南将军询...原创 2018-04-13 16:19:51 · 205 阅读 · 0 评论 -
xynuoj 1864 士兵杀敌(一)
1864: 士兵杀敌(一)时间限制: 1 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。注意,南将军可能会问很多次问题。输入只有一组测试数据第一行是两个整数N,M,其中N表示士兵的个数(1<N<10000...原创 2018-04-13 17:20:40 · 193 阅读 · 0 评论 -
xynuoj 1887 前缀式计算
1887: 前缀式计算时间限制: 1 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述先说明一下什么是中缀式:如2+(3+4)*5这种我们最常见的式子就是中缀式。而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )把括号去掉就是:+ 2 * + 3 4 5最后这个式子就是该表达式的前缀表示。给你一个前缀表达式...原创 2018-04-14 09:47:52 · 161 阅读 · 0 评论 -
xynuoj 1897 相同的雪花
1897: 相同的雪花时间限制: 1 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述You may have heard that no two snowflakes are alike. Your task is to write a program to determine whether this is really true. Your program will rea...原创 2018-05-07 09:00:30 · 343 阅读 · 0 评论 -
并查集中的路径压缩和按秩迭代
1.路径压缩普通的并查集中我们仅仅是用一个函数找到了节点的根结点并用一个变量r记录下来返回,之后直接与另一个节点比较看是否是在同一个连通分量上, 如图,这样的话查找的效率就很低,所以这个时候如果路径压缩的话就会明显降低节点的深度,这在后续查找根节点的过程中会大大提升效率,如下图:这样就把节点直接连接到根节点上,大大的减少了查找效率先来看一下传统并查集的代码:int find(int x){//寻找...原创 2018-05-07 11:13:53 · 611 阅读 · 0 评论 -
nyoj 267 郁闷的C小加(二)中缀表达式变后缀表达式并计算值
郁闷的C小加(二)时间限制:1000 ms | 内存限制:65535 KB难度:4描述聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很高兴。但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值。即先把表达式转换为后缀表达式,再求值。这时又要考虑操作数是小数和多位数的情况。输入第一行输入一个整数T,共有T组测试数据(T<10)。每组...原创 2018-05-08 15:59:55 · 247 阅读 · 0 评论 -
hdoj 1276 士兵队列训练问题 模拟队列
士兵队列训练问题Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11754 Accepted Submission(s): 5158Problem Description某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行...原创 2018-05-22 20:08:26 · 487 阅读 · 0 评论 -
XYNUOJ 1792 括号配对问题
1792: 括号配对问题时间限制: 3 Sec 内存限制: 64 MB提交: 39 解决: 19[提交][状态][讨论版]题目描述现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[...原创 2018-04-12 15:36:29 · 221 阅读 · 0 评论 -
nyoj 35 表达式求值
表达式求值时间限制:3000 ms | 内存限制:65535 KB难度:4描述ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)输入第一行输入一个整数n,共有n组测试数据(n<10)。每组测试数据只有一行,是一...原创 2018-04-12 14:46:00 · 222 阅读 · 0 评论 -
C++中栈和队列的基本操作
使用标准库的栈和队列时,先包含相关的头文件#include<stack>#include<queue>定义栈如下:stack<int> stk;定义队列如下:queue<int> q;栈提供了如下的操作[cpp] view plain copys.empty() 如果栈为空返回true,否则返回false s.siz...转载 2018-03-29 10:08:05 · 330 阅读 · 0 评论 -
C语言位运算符及作用:与、或、异或、取反、左移和右移
http://www.cnblogs.com/zhangpengshou/p/3543056.html原地址一、& 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0应用:(1)清零若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的转载 2017-08-08 09:16:54 · 803 阅读 · 0 评论 -
NYOJ 128 前缀式计算
前缀式计算时间限制:1000 ms | 内存限制:65535 KB难度:3描述先说明一下什么是中缀式:如2+(3+4)*5这种我们最常见的式子就是中缀式。而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )把括号去掉就是:+ 2 * + 3 4 5转载 2017-08-09 20:20:00 · 232 阅读 · 0 评论 -
前缀、中缀、后缀表达式
转自http://blog.csdn.net/antineutrino/article/details/6763722关键字:概念, 前缀表达式, 前缀记法, 中缀表达式, 中缀记法, 波兰式, 后缀表达式, 后缀记法, 逆波兰式它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的转载 2017-08-09 20:24:26 · 359 阅读 · 0 评论 -
一步一步写算法(之hash表)
转自http://blog.csdn.net/feixiaoxing/article/details/6885657hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。转载 2017-08-10 10:39:11 · 230 阅读 · 0 评论 -
汉诺塔(一)
汉诺塔(一)时间限制: 1 Sec 内存限制: 64 MB提交: 17 解决: 10[提交][状态][讨论版]题目描述在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这转载 2017-08-11 20:17:33 · 855 阅读 · 0 评论 -
vector用法
转自http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用转载 2017-08-20 10:02:05 · 231 阅读 · 0 评论 -
NYOJ 63 小猴子下落
小猴子下落时间限制:3000 ms | 内存限制:65535 KB难度:3描述有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关原创 2017-08-07 11:32:54 · 280 阅读 · 0 评论 -
NYOJ 108 士兵杀敌(一)
士兵杀敌(一)时间限制:1000 ms | 内存限制:65535 KB难度:3描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。注意,南将军可能会问很多次问题。输入只有一组测试数据第一行是两个整数N,M,其原创 2017-08-07 15:43:10 · 384 阅读 · 0 评论 -
【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
转自http://blog.csdn.net/jiange_zh/article/details/50198097在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具体问题取一个99999999之类的数(显得很不专业啊!)在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一查才知道,因为这是32-bi转载 2017-08-14 20:03:46 · 254 阅读 · 0 评论 -
HDOJ 1021 Fibonacci Again
问题 B: Fibonacci Again时间限制: 1 Sec 内存限制: 16 MB提交: 135 解决: 35[提交][状态][讨论版]题目描述There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2).输入I原创 2017-08-15 20:16:12 · 277 阅读 · 0 评论 -
HDOJ 2035 人见人爱A^B
人见人爱A^BTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 43846 Accepted Submission(s): 29705Problem Description求A^B的最后三位数表示的整数。原创 2017-08-15 20:27:28 · 371 阅读 · 0 评论 -
xynuoj 1956 郁闷的C小加(一)中缀表达式转后缀表达式
1956: 郁闷的C小加(一)时间限制: 1 Sec 内存限制: 64 MB[提交][状态][讨论版]题目描述我们熟悉的表达式如a+b、a+b*(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达式...原创 2018-04-14 20:14:32 · 271 阅读 · 0 评论 -
poj 1679 The Unique MST 次小生成树
The Unique MSTTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 34518 Accepted: 12600DescriptionGiven a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (S...原创 2018-05-22 20:46:38 · 178 阅读 · 0 评论