09 2012 档案
hdu 4415 Assassin’s Creed
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4415 区域赛的一道贪心题,记当时这题是最多人做的,不过也是通过率最低的题。这题容易因为思考不够严密而导致wa。 题意:一个刺客要暗杀n个人,他只有一把耐久度为m的武器。杀这n个不同的人会消耗不同的耐久度A,不过也有可能获得获得这个人的武器,而且这把武器可以不消耗自己的武器的耐久度来杀B个人。问最多可以杀多少个人,而且武器消耗要尽量小! 贪心主要分为两种情况:第一种,尽可能多的杀掉那些不带武器的人(可以顺便算上是否能杀掉一个带有武器的人)。第二种,因为假如可以杀掉一个带武器的人,就意味着可以杀掉所有带武...
阅读全文
poj 3420 Quad Tiling
摘要:http://poj.org/problem?id=3420 继续矩阵快速幂! 题目意思是给你一个4*n的矩阵用1*2的砖块填充,问有多少种填充的方法。这题可以模仿一道老题(2*n的矩阵用1*2的砖块填充)的递推方法。不过如果是这样递推,推着推着会发现,递推式会有无穷多个项。不过从第三项开始,每项乘以的系数有规律,具体的规律还是查看代码吧!这题我找到的递推式中要分奇偶项,所以构建矩阵的时候就要划分奇偶情况来讨论,所以就构建出奇偶两种矩阵来。奇矩阵是在求奇数项的时候用的,偶矩阵同理。此题轻松1y,代码如下:View Code 1 #include <cstdio> 2 #includ
阅读全文
poj 3233 Matrix Power Series(mid-hard)
摘要:http://poj.org/problem?id=3233 矩阵快速幂的题,求ΣA^i(1≤i≤k)的矩阵并输出。将它二分,用快速幂的方法来O(nlogn)的复杂度完成计算。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 6 using namespace std; 7 typedef int ll; 8 const int matSize = 31; 9 const int stdMod
阅读全文
poj 3735 Training little cats
摘要:http://poj.org/problem?id=3735 矩阵快速幂的题。表示yy了很长一段时间才想到怎么构造矩阵。。。。不过过了sample以后就1y了! 简单的说一下构造的方法:一个原始矩阵(代码里面的Base)只用到第一行。前面n个表示的是每只猫拥有的食物,因为刚开始的时候所有猫都是没有食物的,所以全部设置为0。紧接着的n个数表示的是每一个循环里食物数量的改变值。然后就是每个循环的操作,也就是代码里的op矩阵。这个矩阵是这样设置的,初始化的时候,分成四块,其中有三块矩阵是单位矩阵。然后,对于每一个题目要求的操作,食物加一就是Base矩阵后半部分相应位置加一,食物交换就是op矩阵相..
阅读全文
hdu 4291 A Short problem
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4291 一道矩阵快速幂的题目,给出递推关系,求目标函数的值。 对递推的题比较陌生,刚开始的时候直接将快速幂套进去,过了sample以后就果断交上去了,没想到居然wa了。搞了一段时间,认真检查了代码无数次,还是找不到问题。 然后突然被我想到一个相当大的问题。在直接暴力算的时候,算出一层的结果是已经取模以后的结果,可是题目要的是最终结果取模,如果直接套进去算就会发生偏差。对于最外面一层的的结果模10^9+7,我们需要找到这一层的循环节,曾而降低里面那层得到结果的数据规模。暴力打表,得出最外面一层的循环节大小...
阅读全文
poj 1200 Crazy Search
摘要:http://poj.org/problem?id=1200 字符串搜索,要将字符串之前搜索过的字符串用一个数来映射储存。这里的字符串长达16*10^6,所以不能hash储存,就连下标都不能存下来,所以这里不能用KR算法,因为KR算法要在找到相同以后还要再逐个比较。 这题的数据也比较水,m^n<10^7,所以可以直接开bool数组来记录字符串是否出现!代码如下:View Code 1 #include <cstring> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <algorithm&
阅读全文
poj 1150 The Last Non-zero Digit
摘要:http://poj.org/problem?id=1150 一道题意相当简单的数论题,求P(n,m)的最后一个非零位的数字,其中0≤m≤n≤2*10^7。直接暴力大数运算是会超时的,这里要用到一些数论的知识。 引用一下wyh师兄的解释:http://www.cppblog.com/wyh123/archive/2011/08/06/152621.html 排列公式:P(n,m)=n!/(n-m)! 将一个数2和5的因子都分离出来,最后这个数就会变成个位是1,3,7,9的数。其中,个位是1的数不会影响到最后一位非零数字。于是,我们就要统计那个区间内,将2和5两种因子的数去掉以后的那些数...
阅读全文
poj 3070 Fibonacci
摘要:http://poj.org/problem?id=3070 入门级矩阵快速幂,自己打了个属于自己的模板!View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 6 using namespace std; 7 typedef __int64 ll; 8 const int mod = 10000; 9 const int matSize = 100;10 11 struct Matrix {12 ll val
阅读全文
hdu 3512 Perfect matching (mid-hard)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3512 贪心是我的短柄啊!WA了十几次,最终迎来了AC。。。囧! 这题是要找到每种匹配情况中两权值的积的最大值中最小的那种情况。先排序,然后从绝对值大到小,将异号的两个权值乘起来,然后再处理剩下的同号的那些。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <vector> 5 6 using namespace std; 7 typ
阅读全文
poj 3667 Hotel
摘要:http://poj.org/problem?id=3667 又是一道线段树的题,这次的操作是【区间更新,查询最大连续区间】。这题是之前一题"内存管理"的模拟题的简化版,在插入区间前先查找满足要求的位置,然后就直接整段覆盖,删除也就是简单的删除区间。注意细节就好了! 刚开始的时候打算查找和覆盖打在一起,后来发现这样的操作十分困难,所以还是将查找和覆盖分离了。所以插入区间和删除区间也变成两部分了。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib&
阅读全文
poj 1823 Hotel
摘要:http://poj.org/problem?id=1823 这是一道线段树的题,很久以前就听说它很经典!这是【成段更新,全段询问】的线段树。 题目要求的是更新指定区间,然后询问全部区间中连续区间的最大值。这题的时限比较紧,最好是用G++来做,C++我的代码超时了。。。。囧!View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <cassert> 5 6 using namespace std; 7 8 #define lson l
阅读全文
poj 2201 Cartesian Tree
摘要:http://poj.org/problem?id=2201 正如题目所说,这是笛卡尔树的构造,输出每个结点的父节点,左右子结点的标号。十分简单的题,轻松1y!View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cassert> 4 #include <algorithm> 5 #include <cstdlib> 6 #include <vector> 7 8 using namespace std; 9 typedef vector<int
阅读全文
hdu 4414 Finding Crosses && hdu 4417 Super Mario
摘要:杭州网络赛的两道水题,4414是暴力搜索,找到满足条件的十字架,4417是简单的线段树,需要查找区间中满足条件的数的个数。代码如下:hdu 4414 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 7 const int maxn = 55; 8 int mp[2][maxn][maxn]; 9 char rec[maxn][maxn]; 10 11 void cntVer(int n) { 12 memset(mp[0],
阅读全文
zoj 2243 Binary Search Heap Construction (笛卡尔树)
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1243 这时一道笛卡尔树的题目。 刚开始,想都没想就手打了一棵Treap,也没有计算最坏情况下要操作多少次,于是就一直改指针什么的,并一直TLE。后来,只好找题解来解释一下我TLE的原因了。直接就看到一个博客,博主也是跟我一样,刚开始的时候用了Treap,结果TLE了。然后,我就看到了一个新名词——笛卡尔树(Cartesian Tree)。我立即维基了一下笛卡尔树的定义,发现原来笛卡尔树的构造十分简单。 笛卡尔树,一种特殊的Treap,采用离线插入。当结点权值被固定的时...
阅读全文
hdu 1223 Order Count
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1223 dp递推求满足条件的不等式的个数。 这里需要用到大数乘法,于是我就顺便打了一个大数的模板,重载了+和*运算符。 递推的公式很简单,dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j] * j,其中i 是指共有i 个符号,j 是指将i 个符号分成j 份,dp得到种类的数目。然后dp[i][1~i]各项相加,就是最终的答案了。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #incl
阅读全文
Minimum Expression of String 字符串最小表示
摘要:十分详细的解释:http://hi.baidu.com/kfkkwlhvxcadotr/item/14a46a2b1f889e152a0f1c5f几道相关例题的代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <cassert> 4 #include <algorithm> 5 6 using namespace std; 7 8 char buf[100001]; 9 10 int minExp(char *s) {11 int i = 0, j = 1, k = 0, t;12 i
阅读全文
hdu 4046 Panda
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4046 简单线段树【单点修改,查询区间】,合并两个目标区间,查找区间中目标子串的个数,子串可以有重叠的部分!AC代码:View Code 1 #include <cstring> 2 #include <cstdio> 3 #include <cassert> 4 #include <algorithm> 5 6 using namespace std; 7 8 const int maxn = 50001; 9 int cnt[maxn << 2]
阅读全文
poj 1442 Black Box
摘要:http://poj.org/problem?id=1442 简单BST求k大数,在线插入各个元素并查询。SBT版:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <vector> 6 #include <queue> 7 8 using namespace std; 9 typedef vector<int> vi; 10 11 struct SB
阅读全文
poj 3481 Double Queue
摘要:http://poj.org/problem?id=3481 第一道SBT的题,十分简单,1y。 这题用优先级来排序,查找优先级最小/最大的元素,返回其值并删除节点。 构造popHead和popTail两个函数,搜索最小/最大的节点。因为构树的时候没有构造父节点指针,所以对节点修改的函数都必须用引用符号来继承上一结点的属性。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 6 using namespac
阅读全文
hdu 3065 病毒侵袭持续中
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3065 继续简单AC自动机,1y~View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <set> 5 #include <cstdlib> 6 7 using namespace std; 8 9 const int kind = 256; 10 const int maxn = 51 * 1001; 11 12 struct Nod
阅读全文
hdu 2896 病毒侵袭
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2896 AC自动机的简单题。。。忘记关debug了,wa了一次。。。囧!View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <set> 5 #include <cstdlib> 6 7 using namespace std; 8 9 const int kind = 128; 10 const int maxn = 201 * 50
阅读全文
poj 2417 Discrete Logging
摘要:http://poj.org/problem?id=2417 BSGS,直接套之前那题。不过我在multiMod函数里进行了修改,这样这个代码如果输入只是32位有符号数,就不用怕溢出了!代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <map> 5 #include <algorithm> 6 7 using namespace std; 8 typedef __int64 ll; 9 10 //map<i
阅读全文
poj 3243 Clever Y(Baby-Step Giant-Step)
摘要:http://poj.org/problem?id=3243 继续做一下BSGS的题,不过这题有点表述不清,我认为题目应该描述为XYmod Z ≡ K,因为的这题AC算法是不用判断余数是否大于模的。 本来还想直接贴hdu那题的过去的,结果贴过去以后返回了wa,然后我就开始怀疑自己的BSGS写烂了,在hdu只是轻轻水过而已。于是,我就一个花了一个上午去debug这题,同时认真理解了一下BSGS算法的原理。对于前面一题消因子的方法,http://www.2cto.com/kf/201208/146200.html这个博客的解释比较容易理解。然后,我就根据思路,仔细的检查了一下代码,同时把某些判..
阅读全文
hdu 2815 Mod Tree
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2815 题意很简单,转换过来,就是要求满足K^x mod P = N的最小X。 这是专业版的Baby-Step Giant-Step,相对之前那个hdu 1395的BSGS的用途广泛的多。这里的算法可以解决当底数与模非互质的时候,满足条件的X的最小值。 BSGS粗略的说,就是像我前两篇随笔的解释一样。不过,实际解决问题的时候,如果底数与模不是互质,那么exgcd求AX mod B = C中,X的解并不正确。因此,在该过程前,要将式子中的A与B互质,从而解出唯一解!使得两者互质的过程如下:while((t...
阅读全文
hdu 1576 A/B
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1576 简单exgcd应用。。。无压力1y。。。。View Code 1 /* 2 * Author: SCAU_Lyon 3 * Problem: hdu 1576 4 * Method: ex-gcd 5 */ 6 7 #include <cstdio> 8 #include <cstring> 9 #include <cmath>10 #include <algorithm>11 #include <cassert>12 13 using na
阅读全文
hdu 1395 2^x mod n = 1
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1395 数论的题目,这题是可以直接暴力搜出来的,不过正解应该是Baby-Step-Giant-Step(以下简称BSGS)。下面的解释只适用于底数与模互质,其他情况是不能解出正确答案的。正确的BSGS解法在之后两篇中有介绍! 其实BSGS的原理十分简单,就是将被搜索的数分解成i * (sqrt(m) + 1) + j(m是等式中的模)的形式,先求出1~(srqt(m) + 1)的所有mod m的余数,这个步骤因为跨越的区间小,所以这叫Baby-Step。然后就是Giant-Step,每次跳跃。如果借助ha..
阅读全文
hdu 2222 Keywords Search
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2222 毫无遮掩的AC自动机一枚!刚开始的时候不知道这题是用AC自动机做的,于是我就用了后缀数组,大概算了一下,貌似是勉强可以通过少数的大数据的。不过实际情况是超时了。。。。。这是后缀数组的代码:Suffix Array 1 /* 2 * Author: Lyon 3 * Problem: hdu 2222 4 * Method: Suffix Array 5 */ 6 #include 7 #include 8 #include 9 10 #define FOR(i, a...
阅读全文
hdu 3435 A new Graph Game
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3435 题意是,从一个给定的图里得到一个或以上的哈密顿回路,使得所有边权之和最小。子图不能只有一个点。 很容易想到用KM最优匹配,将自环全都设置为不连通,然后一次KM匹配就可以完成了!这次的KM算法不能只用一个slack来记录松弛的大小,必须要用多个slack,以空间来换时间。于是我就顺便更新我的KM模板了~!AC代码:View Code 1 /* 2 * Author: Lyon 3 * Problem: hdu 3435 4 */ 5 6 #include <cstdio> 7...
阅读全文
hdu 2766 Equilibrium Mobile
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2766 不知道算是什么题,应该是排序题吧。。。。 直接将weight乘以2^depth,然后统计相同的个数最多有多少个,用总数减去统计出来的个数就是答案了! AC代码:View Code 1 /* 2 Auther: Lyon 3 Problem: hdu 2766 4 */ 5 6 #include <cstdio> 7 #include <iostream> 8 #include <cstring> 9 #include <cassert>10 #inclu
阅读全文
hdu 3645 Code Management System
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3645 一道单纯的模拟,不过要非常仔细的读题,否则必然会有各种各样的错误!区域赛的模拟题就是有难度,差点又卡我一个晚上了。。。。囧! 给点自己debug用的数据:SampleSample in:2Alice 1 3[2010/07/18 12:00:00] SYNC[2010/07/18 12:01:00] MODIFY 1[2010/07/18 12:05:00] SUBMITBob 2 3[2010/07/18 12:00:01] SYNC[2010/07/18 12:01:30] MODIFY 1[..
阅读全文
hdu 3006 The Number of set
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3006 状态压缩,位运算!看到别人题解里有这题,就看到这题是用状态压缩来做的,当时我想都不想就马上把状态压缩的代码打上去。不过我打着打着才发现好像不是那么简单,就算压缩了也不能搜索啊。。。囧!然后我又陷入一片窘境。。。。。 后来想到了可以改变思考的方向,不是找集合合并后会产生怎样的集合。因为元素的个数是限定的,所以集合的上限是确定的,因此我想到了搜索每种情况是否可能达成。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3
阅读全文
hdu 3308 LCIS
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3308 又是一题区间合并的题,今晚就这题就debug到我晕了。。。。。 同样是之前poj那题的错误,就是区间合并的部分思路混乱了一下。 题目很简洁,就是要求区间的最大上升子串,同时要有动态的单点更新!线段树功能【单点更新,查询区间】。 题目告诉我,我应该找多点这样的题来做,从而防止这样的思维混乱再次发生,因为这明显就是应该1y的水题!- -View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib&
阅读全文
hdu 3648 Median Filter
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3648 题意相当简单,就是要找出所有给定大小的r*r的矩阵的中位数。 这题理论上可以用各种各样的数据结构完成,可以用线段树(或线段树的退化版,点树),treap,AVL树,或者树状数组等。不过,由于数据规模的限制,这题就只能用树状数组来过了。因为其他以上提到的数据结构都是因为常数太大,所以会超时。另外,这题还要模拟矩阵移动的过程,要蛇形移动,否则元素进出树状数组的次数过多也会超时!AC精简版:View Code 1 #include <cstdio> 2 #include <cassert&
阅读全文
Codeforces: Empty Triangle
摘要:这是codeforces gym中的2011-2012 Stanford Local Contest, 8 October, 2011的一道几何题。题意很简单,就是给出500条直线,问你有多少个不被其他直线穿过的三角形。这道题一个很简单的思路就是先要找出每条直线上的交点,因为如果图形是空三角形,那么组成三角形的的每两个顶点都是某条直线上相邻的两个交点。于是我们利用直线的标号,用某条直线上所有点相邻的两条直线与该直线组成三角形,很容易可以找到最多不超过250000个三角形。其中必然会有重复的三角形。如果三角形重复次数是3(最多也只能是3),那么这个就是一个空三角形。用multiset可以很方..
阅读全文
hdu 2871 Memory Control
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2871 这是要用线段树的一道模拟题,题意相当简单,就是模拟内存分配的操作。题目用到线段树【单点更新,单点查询,区间更新,查找区间】的功能。 New:寻找是否有大于指定长度的区间,并将区间染色,标记起始位置。 Free:查询单点值,如果已被占用,则删除该区间。 Get:查找第x个区间,并返回起始位置。 Reset:将区间清空。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <vector> 4 #in
阅读全文
hdu 4027 Can you answer these queries?
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4027 【更新区间,查询区间】的线段树,必须抓住修改6次以后每个数必然会变成1,然后以后的修改都将不起作用,在此之前的更新都是暴力更新。这是相当简单的题! 我的做法是记录那些区间里的数都是小于2的,然后在更新的时候就不必更新那那些区间了。不过这题在数据格式中有个小trick,就是给出的区间范围的两个指针x可以大于y,这时在区间修改之前要交换回来。我就是在这个惯性思维的小trick上卡了一个下午。。。。。囧!View Code 1 #include <cstdio> 2 #include <c
阅读全文
hdu 4286 Data Handler
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4286 到了大型比赛,就算是再水的模拟题都是神模拟。。。这是2012天津网络赛的模拟题。 这题是模拟一个链表的指针移动,插入或删除结点,以及倒置指针间的数据顺序。直接一个双向链表就解决问题了! 这道模拟还算简单,虽然打了快300行,不过是很容易1y的题。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cassert> 4 #include <map> 5 #include &
阅读全文
hdu 4277 USACO ORZ
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4277 暴力dfs全部情况,然后用set去重。。。。 刚开始的时候打算用状态压缩,先从所有枝条中找到其中两组枝条,枚举全部情况。不过这种方法搜索要15 * 9E7次,一个case就超时了。后来改成枚举3^15种状态的状态压缩,3^15是不超时的,不过统计的时候每种状态统计15次,这就完蛋了!刚开始的时候没有意识到这样的问题,而且状态压缩我也打的不多,所以没有什么时候该用什么时候不该的意识,所以一直TLE都没有找到原因。最后一次代码,在dfs的时候同时统计三条边,然后在用完所有边后用set来统计(或者has..
阅读全文
hdu 4278 & 4279 题解
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4278八进制转十进制:View Code 1 #include <cstdio> 2 3 int st[10], top; 4 5 int deal(int a){ 6 int ret = 0; 7 8 top = 0; 9 while (a){10 st[top++] = a % 10;11 a /= 10;12 }13 while (top--){14 if (st[top] > 8) st[top] -= 2...
阅读全文
hdu 4267 A Simple Problem with Integers
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4267 一道加强版的树状数组题,利用题目的关键点——除数较小,可以想到将除数跟余数分类,最多分成55种情况,也就是每个结点存放55个数据的的树状数组。 建树相对简单,遵循思路,直接构建【区间修改,单点查询】的树状数组。就是query的时候比较难想懂,不过明白构树的原理,反过来就可以知道query时要查询那些数据了。在query的时候,只需要将查询的点除以除数得到余数,然后对被查询的数、除数以及余数相应的位置进行树状数组的叠加操作,最后输出结果即可。1y代码:View Code 1 //hdu 4267 ...
阅读全文
hdu 4268 Alice and Bob(STL版)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4268 这是今天网络赛的水题,下午短路了,没想到怎么做。队友hq是用treap做的,不过赛后我才想懂怎么做,回到宿舍快速打了一个,立马就一个1y了。。。。 这题跟以前做的数星星十分相似,转化过去其实就是在指定坐标与其左下方的点匹配。我用线段树做,如果自己打数据结构,可以用treap,也可以直接利用multi_set来当treap用。这题的时限挺长的,所以用了大量的STL都没超时。3000ms+的代码:View Code 1 #include <cstdio> 2 #include <cstr
阅读全文
poj 2104 K-th Number && poj 2761 Feed the dogs
摘要:http://poj.org/problem?id=2104http://poj.org/problem?id=2761 这是一道划分树的题目,说白了就是线段树的变种。在百度文库找到相关的文章,我花了整整一个晚上才把这个变种线段树搞懂。虽然划分树只能查询区间K大值,功能局限较大,不过作为一个挺好写的算法,它还是有它的实用价值的!刚开始理解这种数据结构的构造并不难,可是在query的时候会遇到几个相对棘手的问题,这也是相当关键的问题。对着图的划分方法,很容易就想到如何query,不过在这个时候必须要思维清晰,能够深入理解query中每一个值是怎么来的。 在query中,如果要继续划分下去,直..
阅读全文
poj 1090 Chain
摘要:http://poj.org/problem?id=1090 简单格雷码加大数,最近想先看书,所以有空只是拿这些水题来练练手......View Code 1 #include <cstdio> 2 #include <cstring> 3 4 const int mod = 1000000000; 5 int ans[40], dg; 6 bool r[1005]; 7 8 void db(bool add){ 9 for (int i = 0; i < dg; i++){10 ans[i] <<= 1;11 }12 if (add){13 ...
阅读全文
hdu 1496 Equations
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1496 上一题hash的升级版,不过还是简单题..只能当作是练手了...View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 const int maxn = 50007; 6 int hash[maxn], cnt[maxn]; 7 int tx[101]; 8 9 void pre(){10 for (int i = 1; i <= 100; i++){11 tx[i
阅读全文
poj 2785 4 Values whose Sum is 0
摘要:http://poj.org/problem?id=2785 简单hash,不过不能用set,而且数组不能开太大。 才几十行的代码,当时个人赛居然不会... - -View Code 1 #include <cstdlib> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 const int maxn = 4001; 8 const int mod = 15999997; 9 int hash[maxn * maxn], cnt[maxn * maxn];10 int
阅读全文
浙公网安备 33010602011771号