acm
文章平均质量分 50
mosquito_zm
这个作者很懒,什么都没留下…
展开
-
hdu4771 Stealing Harry Potter’s Precious(状态压缩+bfs)
题意:给出一个图,求出经过所有给定点(<=4个)的最短路径。 题解:由于给定点很少,可以进行状态压缩,然后包里搜索即可。#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cstring>using namespace std;const int maxn = 100+10;原创 2016-08-21 12:02:52 · 391 阅读 · 0 评论 -
HDU4597:Play Game(记忆化搜索(dp))(博弈)
Alice and Bob are playing a game. There are two piles of cards. There are N cards in each pile, and each card has a score. They take turns to pick up the top or bottom card from either pile, and the sc原创 2016-08-21 13:58:57 · 428 阅读 · 0 评论 -
HDU 5521:Meeting(最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=5521Meeting Problem Description Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated hisfences they were sep转载 2016-10-02 13:42:10 · 302 阅读 · 0 评论 -
Codeforce Round #400 C 签到题
题目链接:点击打开链接题目大意:一个区间的价值【L,R】表示区间内所有元素的价值和。问你一共有多少个区间的价值,是K的非负整数次幂(0,1,2,3,4,5............)。题解:计算前缀和,并将已计算的前缀和放入map中储存,对于每个新的前缀和,只需去map中查找是否有满足条件的前缀和即可。Code:#include #include原创 2017-03-01 21:47:27 · 365 阅读 · 0 评论 -
【Codeforces Round #404 (Div. 2)】 B 连通块(思考)
题目链接题意:给你n个点m条边 如果每个联通块都是完全图 则输出YES题解:并查集处理出联通块。 点的度=当前联通块中的点的个数-1代码如下:#include #include #include using namespace std;const int maxn = 150000 + 20;int n,m;int deg[maxn];int fa[maxn];原创 2017-03-27 15:35:27 · 225 阅读 · 0 评论 -
Codeforces Round #402 (Div. 2) D(简单)(二分)
题目链接题解:水题,二分法,暴力判断即可。PS:下次看到求最值的题,一定要想到二分法。如果是最小值最大类问题,十成有十成是二分法!代码如下:#include #include #include #include using namespace std;const int maxn = 2e5 + 10;char s1[maxn],s2[maxn];int a[maxn原创 2017-03-22 10:50:07 · 305 阅读 · 0 评论 -
Codeforces Round #404 (Div. 2) C(数学)(精度)
题目链接题目解答:显然,这是一道数学题。先考虑特殊情况,nm时,经过计算可得,答案为ans = ceil((sqrt(8 * (n - m) + 1) - 1) / 2);但是直接计算会有精度误差。所以我的解决办法是先将计算出来的结果减去100,再用一个whlie循环一个一个的加,并判断当前结果是否满足原始的算式。(微调结果))PS: long double 好像不能用printf原创 2017-03-22 13:31:46 · 562 阅读 · 0 评论 -
求逆序对做法
1,改进归并排序2,离散化+树状数组原创 2017-04-10 11:31:09 · 372 阅读 · 0 评论 -
范德蒙恒等式的证明
今天我们来认识组合数学中一个重要的恒等式---范德蒙恒等式。这个恒等式的表述如下 很自然的公式,接下来一起来看看它的证明,在维基百科上给出了两种方法证明,分别如下 (1)组合方法证明 甲班有个同学,乙班有个同学,从两个班中选出个一共有种不同的选法。而换一种思维方式 从甲班中选取个转载 2017-04-02 11:13:13 · 691 阅读 · 0 评论 -
codeforce Round #404 D(数学,思路,范德蒙恒等式)
题目链接题意: 问你一共有多少个子串,满足下列条件: ①长度为偶数 ②前一半是( ③后一半是) ④子串不必要连续。 题解:我们O(n)枚举分界线,那么对应左侧有n个(,右边有m个) 则答案为C(i,n)*C(i,m)。而由范德蒙不等式可得结果。PS:求组合数时可以先将所有阶乘都预处理出来,在直接求即可代码如下:#include #inclu原创 2017-04-02 14:25:51 · 707 阅读 · 0 评论 -
何为函数指针
转载自:http://www.cnblogs.com/uniqueliu/archive/2011/07/27/2118619.html=========================引子========================= 我们都知道,数组名就是指向数组第一个元素的常量指针(详见《数组拾遗》)。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指转载 2017-03-26 19:51:01 · 223 阅读 · 0 评论 -
C/C++ typedef用法
引言typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。typede转载 2017-03-26 20:06:17 · 193 阅读 · 0 评论 -
BestCoder #92 C (dp)(要学会表示状态啊)
题目链接以下几段摘自官方题解:大家要学会分析状态啊喂!多思考多开脑洞,分析出状态之后,就是一个DP或者记忆化搜索,自然就可以写出来啦!首先,因为字符不是'2'就是'3',所以我们可以把字符串当做一个全部都是'3'的串,然后有若干的'2'插入到了某些位置。显然,我们交换相邻的'2'与'2'或者相邻的'3'与'3'是没有意义的,我们只会进行相邻'2'与'3'之间的交换。原创 2017-04-16 15:10:42 · 313 阅读 · 0 评论 -
CodeForces - 757C (反向思维)
题目链接本题一开始正面去想,就像是一个集合的操作,极其复杂。但实际上,如果我们倒着想,将每个动物所在的gym都记录下来,如果出现多次,就记录多次。那么我们知道,只要两个动物的出现序列相同,就可以交换。而判断相同时,我们可以用类似后缀数组判断时的思想,将所有序列都排好序,然后只有相邻的序列才有可能相等。这样,只要扫一遍,就可以求出答案。代码如下:#include using names原创 2017-07-12 11:23:08 · 495 阅读 · 0 评论 -
POJ3630(Trie树)
题意:求给定的多个串中是否存在,某个串是另一个串的前缀。解题思路:使用Trie树。在每次插入一个串的同时判断。对于该问题,只存在以下两种情况: 1.当前插入的串的前缀是前面的某个串。对于这种情况,把前面插入的串的最后一个节点记为危险节点。那么在后面插入串的时候,如果经过危险节点,说明这种情况成立。 2.当前插入的串是前面某个串的前缀。对于这种情况,把插入串的最后一个节点单转载 2017-07-12 20:52:46 · 293 阅读 · 0 评论 -
HDU 2089 (数位dp)
入门题。就是数位上不能有4也不能有连续的62,没有4的话在枚举的时候判断一下,不枚举4就可以保证状态合法了,所以这个约束没有记忆化的必要,而对于62的话,涉及到两位,当前一位是6或者不是6这两种不同情况我计数是不相同的,所以要用状态来记录不同的方案数。dp[pos][sta]表示当前第pos位,前一位是否是6的状态,这里sta只需要去0和1两种状态就可以了,不是6的情况可视为同种,不会影响计数原创 2017-07-04 16:02:14 · 353 阅读 · 0 评论 -
HDU 4734(数位dp)
题目给了个f(x)的定义:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足f(i)常规想:这个f(x)计算就和数位计算是一样的,就是加了权值,所以dp[pos][sum],这状态是基本的。a是题目给定的,f(a)是变化的不过f(a)最大好像是4600的样子。如果要mems转载 2017-07-04 16:04:10 · 232 阅读 · 0 评论 -
POJ 3252(数位dp,前导0)
这题的约束就是一个数的二进制中0的数量要不能少于1的数量,通过上一题,这题状态就很简单了,dp[pos][num],到当前数位pos,0的数量减去1的数量为num的方案数,一个简单的问题,中间某个pos位上num可能为负数(这不一定是非法的,因为我还没枚举完嘛,只要最终的num>=0才能判合法,中途某个pos就不一定了),这里比较好处理,Hash嘛,最小就-32吧(好像),直接加上32,把32当0原创 2017-07-04 16:06:19 · 786 阅读 · 0 评论 -
HDU 3709 数位dp
本题只需枚举中轴位置,然后数位dp即可PS:注意00,000这些都不能算进去,要单独去掉(因为在不同的中轴线下,这些数会算多次0,导致结果错误)#include using namespace std;#define ll long longconst ll maxn = 20;ll dp[maxn][4000][maxn];ll a[maxn];ll dfs(int pos,原创 2017-07-04 16:09:07 · 223 阅读 · 0 评论 -
hdu4507(数位dp,较复杂)
这题麻烦就是要求数的平方和。我们先考虑求和的问题,一个区间,数位dp能在一些约束下计数,现在要这些数的和。其实组合数学搞搞就可以了:如 现在枚举的某一位pos,我统计了这一位枚举i的满足条件的个数cnt,其实只要算i对总和的贡献就可以了,对于一个数而已第pos位是i,那么对求和贡献就是i*10^pos,就是十进制的权值,然后有cnt个数都满足第pos位是i,最后sum=cnt*i*10^pos转载 2017-07-04 22:45:55 · 443 阅读 · 0 评论 -
Codeforces346B Lucky Common Subsequence(KMP+dp)
题目链接题解:对于LCS问题,我们的正解是用dp解决。而本题目中还有了一个数组是不能够包含的,所以我们可以给dp新增加一维。dp[i][j][k]表示A串前长度为i的子串,B串前长度为j的子串,能匹配到的C串的最长位置为k时的最长长度。转移时,与LCS问题类似。对于k的转移,就是要判断当前为是否可以继续匹配到C中k的下一位中去,如果可以,就加1,不可以,就根据失配函数进行转移,知道可以原创 2017-07-15 12:29:55 · 425 阅读 · 0 评论 -
STL - deque(双端队列)
Deque简介deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。deque在接口上和vector非常相似,在许多操作的地方可以直接替换。deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。deque头部和尾部添加或移除元素都非常快速。但是在中部安插转载 2017-07-06 21:06:05 · 203 阅读 · 0 评论 -
fzu2265Card Game (Second Edition) (数学)(简单)
b 从小到大排序, a对应有n!中排列,其中a[i]对于某个b[j]是有(n-1)!都是对应的(因为a[i]只能对应n个b中),而a[i]对应b[j]的值是一定的,可以直接计算出每个a[i]在这n!中方案中的贡献值,所有a[i]然后相加除以n!(可以把n-1!去掉,最后就是除以n了)。 就是说每个a[i]都会有n*(n-1)!种对应情况,然后只要算出n种情况里面哪几个贡献出了1分,最后转载 2017-07-20 11:25:26 · 482 阅读 · 0 评论 -
Educational Codeforces Round 19 F(dp+队列优化)
网址:http://codeforces.com/contest/797/problem/F显然,要先排序。我们可以先处理出所有老鼠到所有洞的距离,p[i][j]表示第j只老鼠到第i个洞的距离。由于我们每次求的时候都是一段区间的老鼠到一个洞中,所以我们可以通过求前缀和优化计算。对于p[i][j],其前缀和为d[i][j],表示前j只老鼠都进入i洞中所需要的花费。在实际运算中,因为我原创 2017-07-07 12:42:10 · 347 阅读 · 0 评论 -
hdu 5015 233 Matrix (矩阵快速幂)
233 MatrixTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 749 Accepted Submission(s): 453Problem DescriptionIn our daily lif转载 2017-07-07 21:07:49 · 255 阅读 · 0 评论 -
分解质因数的技巧
在ACM比赛中,我们经常要分解质因数。那么我们应当如何快速分解质因数呢?其实,在我们用筛法求素数时,我们使用线性筛的方法,并在每次筛的过程中,记录下每个数的最小质因数。那么在分解质因数的时候,我们只需要不断除每个数的最小质因数,就可以快速得到分解的质因数。(不要用试除法了。。)原创 2017-07-08 20:17:18 · 2600 阅读 · 0 评论 -
HDU2256&&HDU4565:给一个式子的求第n项的矩阵快速幂
HDU2256题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2256题意:求(sqrt(2)+sqrt(3))^2n%1024是多少。这个题算是hdu4565的一个常数版本了,所以我们先说这道题。对于这道题的做法我们可以计算((sqrt(2)+sqrt(3))^2)^n=(5+2*sqrt(6))^n,对于(5+2*sqrt(转载 2017-07-21 14:36:50 · 237 阅读 · 0 评论 -
OpenJ_POJ - C17J Pairs(数学+技巧暴力)
题目链接题解:由于注意到x的范围较小,我们显然可以同时枚举x与p进行计算。先枚举想,在枚举p的过程中,我们发现,对于同一个x,不同的p可能会算出同一个y,导致重复。为了解决这种状况,我们可以先求出所有数的所有因数,在那之后,我们对于同一个x,用一个vis数组记录所有产生的y,并在记录时计数即可。PS:技巧:我们可以在每次记录y是,vis数组的标记用当前的x,而不是1,这样判断时只需要比较是原创 2017-07-21 15:50:42 · 510 阅读 · 0 评论 -
一些扩展kmp的总结
花了一天多时间学了下ex_kmp。。。。可以看刘雅琼的ppt,讲的非常清楚:下载地址:http://url.cn/Rvjxa9ex_kmp可以在线性时间内求文本串的每个位置与模板串的最大公共前缀 ,写法和普通kmp差不多。。我的写法是:next[i]: P[i..m-1] 与 P[0..m-1]的最长公共前缀ex[i]: T[i..n-1] 与 P[0..m-1]的转载 2017-07-18 10:53:42 · 349 阅读 · 0 评论 -
树状数组求区间最大值
这个算法只支持单点修改和区间查询最值。每一次维护和查询的时间复杂度都是O((logn)^2),但这是满打满算的时间复杂度。假设是要维护和查询区间的最大值(最小值将max改成min 就好了)这个算法和树状数组维护和查询区间和的方法很相似: 一、数组的含义1、在维护和查询区间和的算法中,h[x]中储存的是[x,x-lowbit(x)+1]中每个数的和, 2、在求区间最值的算转载 2017-07-31 11:02:46 · 1444 阅读 · 0 评论 -
Codeforces 835D Round #427 D-Palindromic characteristics—— DP+回文串
注意:凡是可以用O(n^2)算法求回文串时候,都可以用dp求解。dp[i][j] = (s[i] == s[j]) ? dp[i + 1][j -1] : 0(即当前两端是否相等,若相等,则只取决于中间是不是回文串)。预处理的时候,只需要令所有的dp[i][i] = 1,dp[i][i - 1] = 1(方便转移)即可。题解:Observation I.If the str原创 2017-08-07 17:10:02 · 236 阅读 · 0 评论 -
poj3071 概率dp
由题可知,本题为概率dp。d[i][j] 表示第i个人从第j轮晋级的概率。 则dp[i][j] = ∑〖dp[k][j-1] * p[i][k]〗* dp[i][j-1],其中k为在当前轮次所有可能与i交手的对手。上式表示本轮中于每一个可能的对手的出现概率与胜率乘积再乘上本人晋级本轮的概率。最后答案只要找到最大值即可。 代码如下:#include <cstdio>#include <iost原创 2017-07-23 14:25:05 · 224 阅读 · 0 评论 -
解决静态查找相同串或者有相同前缀的所有串的好方法
方法一:可以将所有带查询的串进行排序,然后就可以发现,只有排序后相邻的串才可能相同(或者有相同的前缀)。所以,在那之后,只需要从头扫一遍,即可得到答案方法二:将所有带查询的穿按位进行哈希,然后在哈希的结果中查找是否有相同的串(或相同前缀)原创 2017-07-23 17:10:19 · 437 阅读 · 0 评论 -
scu oj 4442 Party(2015年四川省acm程序设计竞赛)(*)
Partyn frogs are invited to a tea party. Frogs are conveniently numbered by 1,2,…,n.The tea party has black and green tea in service. Each frog has its own preference. He or she may drink on转载 2017-08-01 09:35:04 · 409 阅读 · 0 评论 -
scu oj 4441 Necklace(dp+树状数组)(*)
题目链接Necklacefrog has n gems arranged in a cycle, whose beautifulness are a1,a2,…,an. She would like to remove some gems to make them into a beautiful necklace without changing their relative转载 2017-08-01 09:44:26 · 268 阅读 · 0 评论 -
原根
定义:设,,使得成立的最小的,称为对模的阶,记为。定理:如果模有原根,那么它一共有个原根。定理:若,,,则。定理:如果为素数,那么素数一定存在原根,并且模的原根的个数为。定理:设是正整数,是整数,若模的阶等于,则称为模的一个原根。 假设一个数对于模来说是原根,那么的结果两两不同,且有,那转载 2017-08-16 10:24:21 · 2709 阅读 · 0 评论 -
hdu6063 RXD and math(数学/打表)
题目链接题解(伪):可以打表找下规律,就会发现答案为n^k,直接快速幂即可正解:注意到一个数字xx必然会被唯一表示成a^2\times ba2×b的形式.其中|\mu(b)| = 1∣μ(b)∣=1。 所以这个式子会把[1, n^k][1,nk]的每个整数恰好算一次. 所以答案就是n^knk,快速幂即可. 时间复杂度O(\log k)O(log原创 2017-08-02 10:52:29 · 362 阅读 · 0 评论 -
插板法与第二类stirling数的区别
插板法与第二类stirling数都是用来处理n个物品分为p份的处理方法。其区别在于:对于插板法来说,每个物品是等价的,没有差别的;而对于stirling数来说,每个物品各不相同。原创 2016-08-12 15:14:45 · 398 阅读 · 0 评论 -
旋转卡壳算法
旋转卡壳算法 poj2187 poj3608 旋转卡壳可以用于求凸包的直径、宽度,两个不相交凸包间的最大距离和最小距离等。虽然算法的思想不难理解,但是实现起来真的很容易让人“卡壳”。 拿凸包直径(也就是凸包上最远的两点的距离)为例,原始的算法是这样子: Compute the polygon's extreme points in the y d转载 2016-08-17 12:41:29 · 483 阅读 · 0 评论 -
最大权闭合图 [网络流]最大权闭合图(转载)
最大权闭合图[网络流]最大权闭合图(转载)来自: http://hi.baidu.com/%C6%AE%BB%A8%C4%EA%B4%FA/blog/item/45d4bb1765e7044721a4e960.html以下内容参考 胡伯涛 《最小割模型在信息学竞赛中的应用》,感谢他为我们提供这么优秀的论文。看不懂以上论文的同学,可以试试看一下以下内容转载 2016-08-26 19:37:02 · 403 阅读 · 0 评论