- 博客(43)
- 收藏
- 关注
原创 用c++做性能测试
时间:timeval start_time,end_time;gettimeofday(&start_time,NULL);gettimeofday(&end_time,NULL);cout<< "time(s) : " << end_time.tv_sec-start_time.tv_sec + (end_time.tv_usec-start_time.tv_usec)/1000000.0 <
2017-03-16 16:02:51 1001
原创 关于高阶题
总结高阶题一些特性:需要知道一些常人不能在限时内推出的定理,靠积累巧妙优化构造一种策略,使它表面上看起来是暴力,分析复杂度后是可行的分情况用不同做法处理
2017-03-04 15:58:05 330
原创 RSA
取两个长度相当的质数p,q n=p*q 取一个和n互质的数e 求模(p-1)*(q-1)意义下e的逆元d,即e*d = 1 (mod (p-1)*(q-1) ) 设明文m[],密文c[] 加密:c[i]=m[i]^e mod n 解密:m[i]=c[i]^d mod n 这里用到欧拉定理:a^phi(p)=1 (mod p) c[i]^d mod n =(m[i]^e)^d mo
2016-12-27 19:21:01 383
原创 数论
对于方程ax≡c(modb)ax \equiv c \pmod b,若gcd(a,b)|cgcd(a,b)|c,则有解,解的个数为gcd(a,b)
2016-08-20 10:56:42 270
原创 HDU5575 转化成树形DP
按照从低到高的顺序处理所有的隔板和询问,在这个过程中用并查集维护一个连通的区域,每次合并区间或者处理一个在新的高度的询问时都新建一个树节点。总体来说大概就是自底向上地建树,之后就可以进行傻逼树形DP啦代码#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<al
2016-08-04 23:52:00 726
原创 hdu4876 暴搜剪枝
hdu4876链接题意: n个数中选k个数排成一圈,给一个L,圈中的连续的数的所有异或值中要组成的连续的[L,R]区间,求最大的R(1<=k<=n<=20,k<=6,1<=L<=100)思路: 一看就是只能暴搜了啊,当时算了下时间复杂度感觉姿势不优美不可搜,现在写完发现确实需要比较优美的姿势才能搜过去。。。 一些剪枝和优化:选k个数的时候2^n枚举,不要递归搜索 选了k个数之后先2^k枚举
2016-08-01 00:22:29 362
原创 html适应移动端设置
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
2016-07-13 16:21:11 594
原创 HDU 4317 状压DP
本来好好的在做数位DP专题,结果冒出这么一题害我懵逼了一下,跟数位DP有个蛋关系啊!虽然说确实跟数位和DP都有点关系。。。题目大意: n(n<=10)堆石子,1<=石子数<=1e6,你现在可以向任意堆随意加任意数量石子,但不能增加堆数,问最少加多少石子可以变成先手必败态思路: 考虑到会进位,所以从低位到高位一位一位地考虑,dp[前i-1位已经处理完][n个数进位情况状态],于是每次转移暴力枚举给
2016-06-12 13:34:38 335
原创 SPOJ KPSUM 数位DP
题意: 把1到n(1<=n<=1e15)写在一行,给每个数位间隔地加加减号,像这样: n=12: +1 -2 +3 -4 +5 -6 +7 -8 +9 -1+0 -1+1 -1+2=5 给你n问上面这个式子的结果是多少大致思路: 数位DP,找下规律发现数位长度为偶数的数都是以-开头,数位长度为奇数再分两种情况:这个数是偶数则以-开头,这个数是奇数则以+开头那么开个记忆化搜索: dfs(长度
2016-06-11 16:47:39 440
原创 HDU 5712 很强的DP
暴力DP!四位数组记录每个区间最后一次取数包含了左右端点,在每个公差每个长度下的可行性和删除次数 很强的DP,自己想不出来,继续努力,打脸终有日。代码:#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<string>
2016-06-06 11:54:24 627
原创 BZOJ1009 单模板自动机 矩阵快速幂优化DP
第一次在BZOJ自己做出不是那么水的题,但是看这过题人数。。。嘛还是写一下题解吧题目大意:求只由0到9组成的不包含m(m<=20)位模式串的n(n<=1e9)位字符串的个数涉及到字符串匹配的话 很自然应该往KMP和自动机的方向想。 然后可以很容易发现建自动机可以得到一个DP做法: 定义dp[i][j]dp[i][j]为前i位到达状态j的方案数 那么对每个next[j][k]!=mnext[j]
2016-05-19 10:09:38 330
原创 CF 241B
题目很好可惜我不会做。。。 看了别人代码半天才懂。。。 看完感觉还是没学到啥。。。 于是写点东西记一下吧。。。一堆数异或的问题,一个常用的思路是枚举每一位然后瞎搞 这里的做法是,先确定一个前缀,然后想办法求所有数对能得到多少个这个前缀 然后就可以根据求得的个数和剩下还需要求的个数的关系来计算答案跟确定下一个前缀 于是现在问题变成了有一个前缀,怎么确定这些数能搞出多少这个前缀 于是这里可
2016-05-12 22:16:44 410
原创 弦图 完美消除序列 MCS算法
对于普通图的两个性质:最大团数 ≤\le 最小色数 最大独立集 ≤\le 最小团覆盖而在弦图就变成了:最大团数=最小色数 最大独立集=最小团覆盖 (虽然不知道有什么用完美消除序列:对与序列中的点vi,排在vi后面并且和vi相连的点是一个团 一个图存在完美消除序列是它是弦图的充要条件那么完美消除序列有什么用呢?用处可大啦 求弦图的最大团数/最小色数的时候,只要在完美消除序列上从后往前贪心染色
2016-05-10 18:55:33 4931
原创 prufer序列
给一棵树,它的prufer序列由一下步骤得到: (1)选择度数为1的编号最小的点,把它删掉并把和它相连的点加入序列 (2)重复第一步直到剩下两个点prufer序列的性质: 长度为n-2,记每个点的度数为di,那么每个点都会在prufer序列中出现di-1次那么prufer序列有什么用呢?很显然(但不知道为什么→_→,但直觉上能感觉到)每棵不同的树都对应一个不同的prufer序列,那
2016-05-05 11:34:03 1228
原创 burnside引理
burnside引理: 对于置换群G,G的轨道数= ∑(G中每个置换的不动点个数)/|G|\sum(G中每个置换的不动点个数)/|G|没错我也是来报社的,反正我只是打算自己总结一下那么这个东西有什么用呢?有一类问题是这样的:有N个元素,M种颜色(或者每种颜色有使用次数限制),那么现在还有一个置换群,一种染色方案与它经过这些置换之后得到的方案视为等价,求不同的染色方案数。首先不考虑在置换群下的等
2016-05-04 18:46:43 703
原创 dinic当前弧优化
edge e[maxm];int h[maxn],ecnt,hh[maxn];int lv[maxn];bool bfs(int s,int t){ queue q; clr(lv,-1); lv[s]=0;q.push(s); while(!q.empty()) {
2016-05-02 17:23:06 753
原创 线段树pushdown的时候一定要记得把lazy标记一起下传!
线段树pushdown的时候一定要记得把lazy标记一起下传!线段树pushdown的时候一定要记得把lazy标记一起下传!线段树pushdown的时候一定要记得把lazy标记一起下传!又浪费了一晚上。。。妈的恶心死我了
2016-04-25 23:00:54 867 2
原创 复习数学之中国剩余定理和欧拉定理和扩展欧几里德
这几个玩意儿忘光了。。。中国剩余定理对于线性同余方程组: x≡a1(modm1)x\equiv a_1 \pmod {m_1} x≡a2(modm2)x\equiv a_2 \pmod {m_2} x≡a3(modm3)x\equiv a_3 \pmod {m_3} …\ldots x≡an(modmn)x\equiv a_n \pmod {m_n} 定义 M=∏ni=1mM=
2016-04-20 20:27:42 691
原创 关于斜率优化DP
先根据题意写公式,比较两个决策的情况下得出一个不等式,不等式的一边是一个斜率形式的东西,右边是当前情况下的一个常量设i这之后的求解过程中有三种情况:x()是递增的,a也是递增的这样就可以用单调队列维护O(n)搞定只有x()递增这样就要维护一个凸壳,插入和查询都用二分,所以是O(nlogn)的只有a递增这个还没试过,据说是用splay来维护,感
2016-04-08 15:29:16 240
原创 spfa找负环要注意的地方
当找到入队次数大于n的点时,n却不一定会在负环里面。。。所以要先往前驱pre走n次才能确保当前的点在负环上。。。恶心死人啊。。。
2016-04-06 20:16:11 717
原创 网络流与费用流(下)费用流
费用流费用流算法好像有好多高级算法的样子,但我现在只会一个最简单的spfa连续最短路增广,这个东西就是贪心啦,最短路使每次增广的流的费用最小,没啥好说的。针对这个做法,要注意的地方是,无向图每条边要建4条边。。。还有如果费用有负值要加判负环,别的也没什么了,算法是比较脑残的,关键是建图。const int maxn=1010;const int maxm=50010;c
2016-04-06 11:28:21 481
原创 CF#345div2D题解
为自己能想出怎么做而高兴为自己想半天写出来之后各种bug而蛋疼题目链接 ←题意戳链接分析一下之后发现,最优解显然只有四种情况:(证明略→_→)一直向右翻一直向左翻向左翻到某个位置之后一直向右翻向右翻到某个位置之后一直向左翻对于前两种情况,显然是两个方向扫一遍就可以解决的,那么后两种情况呢?在我们确定了向一个方向走到哪里停下往回走的时候,另一个方向最远可以走到哪里显然可以
2016-04-05 19:51:42 476
原创 带权并查集一定要注意合并的时候要判断!!!
带权并查集一定要注意合并的时候要判断!!!带权并查集一定要注意合并的时候要判断!!!带权并查集一定要注意合并的时候要判断!!!重要的事情说三次
2016-04-03 16:15:40 388
原创 网络流与费用流(上)网络流
网络流小学生都知道的一些性质:最大流等于最小割平面图的最大流等于其对偶图的最短路二分图中最大流等于最大匹配数还有一些乱七八糟的忘了求最大流的算法FF方法(最大流算法的基本思想): 建图,每条边要建反向边,容量为0(无向图容量跟正向边一样),一直找从S到T的增广路,每次找到都把最小的容量加到最大流,然后路上所有边都减去这个值,对应的反向边加上这个值,知道找不到增广路。
2016-04-01 23:44:45 3219 1
原创 hdu5458 LCA+并查集+dfs序+树状数组
神题,看着别人代码学习#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;typedef unsigned long long ULL;#d
2016-03-19 09:47:36 348
原创 noi2005维护数列 splay
用splay来维护数列的一道很好的模版练习题有些要注意的地方:不用指针来实现splay的话要注意内存回收,不然就会无限RE+TLE凡是有对序列进行修改的操作都要up一下reverse的时候要注意交换左起最大连续和跟右起最大连续和代码:#include#include#include#include#include#include#include#include
2016-03-09 13:16:14 292
转载 Vim使用笔记
1. 关于Vimvim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)1.1 Vim的几种模式正常模式:可以使用快捷键命令,或按:输
2016-03-02 15:48:31 1774
原创 hdu4057 ac自动机+dp(我用的方法)
艾玛虽说在10s的时限内用7s过了但是为啥前面那么多人都在1s内就搞定了囧。。。因为太气了所以发个题解上来(雾。。顺便纪念一下ac自动机系列的完成!那么说正题,这道题显然就是先建ac自动机了,题目要求每个串只能被计算一次,这种情况用一般的做法就难办了。然后因为n最大只有10,容易联想到状压,于是结尾标记我用1再之后就是dp了,定义状态dp[长度][在ac自动机上的状态节点][各模式
2016-01-29 23:22:05 294
原创 hdu3247 深刻理解ac自动机+bfs预处理最短路+状压DP
这题卡了我好久啊,蛋疼死我了,一开始还搜了个有错还能ac的代码。。。最后看着kuangbin大神的代码慢慢单步执行理解我写的哪里不对,然后发现他的代码也有点小bug= =,最后改了改他的就默默收藏起来了贴出来是想着谁看到了的话就放心拿去对拍或者学习吧,我叫雷锋(虽然没人会看到的样子代码#include#include#include#include#include#inclu
2016-01-28 21:58:57 300
原创 c语言键盘输入+中文字处理
头文件#include接收键盘输入getch()然后做点测试把特殊的键搞出来做处理///////////////////////////////////////////////////////////////////由于编码问题,中文处理很恶心先弄清楚是什么编码,然后自己测试一下中文的长度规律再然后就去查一下对应的中文编码表找出中文字的范围了。。。
2016-01-04 18:55:46 1310
转载 ACM中java的使用
这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。1. 输入:格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in));例程:import java.io.*;import java.math.*;import j
2015-12-20 15:41:14 1651
原创 a+b*sqrt(c)取整取模
反正我就自己记一记,首先构造An+sqrt(c)*Bn和An-sqrt(c)*Bn,然后随便证明一下得到要求的向下取整的值为2*An-1,这里是针对这个题,不同情况可以参考这样随机应变一下,大概An和Bn可以通过矩阵乘法递推得到因为指数太大必须找循环节,这里模一个最大4W多的质数,据说这个数据范围可以直接暴力一个一个算判断指数到多少会变成单位矩阵,这个就是循环节了再据说就是,根
2015-10-26 19:04:41 720
原创 关于C风格字符串的读取
gets():从上次读取结束的位置开始读到换行符为止,换行符也会被读掉,可以用来处理一整行的包含空格的字符串scanf():从上次读取结束的位置开始读到空格或者换行符为止,空格或换行符会被保留,可以处理由空格分开的字符串处理多余的换行符最好还是scanf里面加个\n,而尽量不要用getchar(),这样会很乱很容易错
2015-10-25 00:12:12 306
原创 CF round 314 E
给一个有向图,现在要从1走最短路走到n,对于每条边问是否必须要经过这条边,如果不是再求能否保证边长大于0的前提下,减少这条边的权值使这条边必须被经过,并输出最小的减少的值。我觉得这题意不难理解吧,就不多说了。首先当然是要跑一遍最短路啦,注意这题有数据卡SPFA,要写堆优化dijkstra才行。然后我们发现跑一遍还不够,还得以n为起点在反向边中再跑一遍最短路,这就求出了每个点p:从1到p
2015-09-08 20:52:54 248
原创 hdu5372 离散化+树状数组
这个题离散化有点蛋疼。。。代码:#include#include#include#include#include#include#include#include#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#includeusing
2015-08-18 23:26:33 293
原创 处理区间问题之树状数组与莫队算法
感觉我直到前两天才算是真正学会用树状数组啊囧。。有一类离线的区间询问问题,可以有以下解法(我暂时会这么多):离线+树状数组||线段树||莫队算法线段树先不说了,好久没写过了,而且本文的标题是树状数组与莫队囧。。用树状数组的关键在于,每次插入一个点或者删除一个点要维护什么东西,一般是插入右端点删除左端点,维护的时候也要注意想清楚对哪部分答案有影响,删除之后要及时处理。而莫队的不同就在
2015-08-18 11:11:53 287
原创 大组合数模100W以内任意整数
那么要求模数为质数的lucas定理就不能用了我们只能直接算阶乘了但是对组合数分母来说与模数不互质的话逆元是不存在的记当前问题为C(n,k) % m把m分解质因数后得到的m=p1^r1 * p2^r2 *......C(n,k) % p1^r1C(n,k) % p2^r2......之后把所有结果用中国剩余定理合并就得到原来的结果了那么现在的问题就是怎么求 C(n
2015-08-18 10:52:59 649
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人