自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

角落里的阳光

是个水货

  • 博客(71)
  • 收藏
  • 关注

原创 后缀数组

看了好久  总算有点懂了   A了俩道水题,把模版贴一下。。。#include #include #include #include using namespace std;const int maxn = 100010;int s[maxn];int sa[maxn],wa[maxn],wb[maxn],ws[maxn];bool cmp(int *r

2013-10-02 21:43:15 547

原创 hdu 4699 Editor 多校第十场 (模拟)

栈 L,R 维护光标之前(之后)的序列那么    I x        L.push(x);            D       L.pop();            L       R.push(L.pop());           R       L.push(R.pop());然后用  s[]数组维护前缀和,ans[]  数组维护前缀和的最大值

2013-08-24 20:09:50 571

转载 【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节

以下内容全部原创,转载请注明作者 : AekdyCoin 以及本文地址http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9曾经看过如下一个公式:以上的公式如果第一次见到,难免有不少疑惑:为什么可以这么写?限制条件为什么是x >= Phi(C),这个公式为什么正确?今天突发奇想,在纸上YY以

2013-08-24 11:03:53 824

原创 欧拉定理

内容在数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。欧拉定理表明,若n,a为正整数,且n,a互质,则:证明首先证明下面这个命题:对于集合Zn={x1,x2,...,xφ(n)},其中xi(i=1,2,…φ(n))是不大于n且与n互素的数,即n的一个化简剩余系(或称简系、缩系),考虑集合S = {a*x1(mod n),a*x2(mod

2013-08-22 21:11:09 739

原创 hdu 4696 Answers 多校第十场

只要C中有1  便可构造任何数,否则只能构造偶数。。#include #include #include #include #include #include #include #include #include using namespace std;#define clr(a, x) memset(a, x, sizeof(a))#define rep

2013-08-22 20:08:43 667

原创 hdu 4704 Sum 多校第十场

答案  是  2^(N-1);(2^500000003)%mod = 1;     所以。。。。。。大整数取完模之后快速幂即可#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #in

2013-08-22 19:38:58 609

原创 hdu 4705 Y 多校第十场

题目求的是非simple path 的个数,那么倒过来想,总数-simple path 数 = 我们所求的。   总数为C(n,3);simple path 数,枚举每个点作为根时,每个子树的结点通过根的 都是 simple path,求和一下即可。#pragma comment(linker, "/STACK:1024000000,1024000000")#include #

2013-08-22 19:11:34 640

原创 hdu 4690 EBCDIC 多校第九场

打表题额。。。。#include #include #include #include using namespace std;const int maxn = 10000005;struct sss{ char s[50];};sss ss[16][16]={"NUL" ,"SOH","STX","ETX"," ","HT"," ","D

2013-08-20 18:22:56 876

原创 hdu 4691 Front compression 多校第九场

起点相同的串,最长公共前缀就为短一点的串长,其他情况,暴力枚举找最长。。#include #include #include #include #include #include using namespace std;#define clr(a, x) memset(a, x, sizeof(a))#define rep(i, n) for (int

2013-08-20 18:11:05 817 2

原创 hdu 4686 Arc of Dream 多校第九场

矩阵+快速幂根据 a[i]*b[i]=(a[i-1]*ax+ay)*(b[i-1]*bx+by)   ==  a[i-1]*b[i-1]*ax*bx+a[i-1]*ax*by+b[i-1]*bx*ay+ay*by用公式推出矩阵之后  快速幂一下就好了。。。#include #include #include #include #include #include us

2013-08-20 17:12:36 1104 3

原创 codeforces 337D Book of Evil

官方题解337D - Book of EvilObviously, in graph theory language our problem is: given a tree with n vertices, m of which are marked, find the number of vertices which are at most distance d a

2013-08-18 15:11:07 759

原创 hdu 4681 String 多校第八场

分别枚举 A 和B 包含C 的起始和结束位置相当于 C分别把A和B 分成俩部分,枚举C在A,B的位置,ans=max(前部最长公共长度+C长度+后部最长公共长度)#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include using names

2013-08-16 20:01:35 494

原创 hdu 4679 Terrorist’s destroy 多校第八场

先从根深搜一遍,所有子节点的最长,次长,次次长链l1,l2,l3 分别 最长,次长,次次长链的大小,s1,s2,s3 表示来自哪个子节点然后再从根dfs一遍,每次将父节点的最长链来更新子节点的链不能直视的搓代码。。。#pragma comment(linker, "/STACK:1024000000,1024000000")#include #inclu

2013-08-16 16:35:34 558

转载 博弈类题目小结(HDU,POJ,ZOJ)

转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove首先当然要献上一些非常好的学习资料:基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530经典翻硬币游戏小结:http://blog.csd

2013-08-16 14:51:19 664

原创 hdu 4678 Mine 多校第八场

可以把空白的和一圈的数字看成一堆,一堆里所有空白看成一颗石子,数字算一颗石子,那么每次可以点一个数字(相当于取一个石子),点空白(相当于取全部)这样就转化成取石子游戏了。。。。 把sg值打标以后发现  是  0,,1,2,1,2,1,2这样子循环的   即奇数的sg值为1   偶数的sg值为2,那么只要把每一堆的个数算出来,再对应的sg值异或运算一下就可以得出答案了。。

2013-08-15 19:04:10 900 1

转载 【完全版】线段树

FROM:http://www.notonlysuccess.com/index.php/segment-tree-complete/在代码前先介绍一些我的线段树风格:maxn是题目给的最大区间,而节点数要开4倍,确切的来说节点数要开大于maxn的最小2x的两倍lson和rson分辨表示结点的左儿子和右儿子,由于每次传参数的时候都固定是这几个变量,所以可以用预定

2013-08-14 14:57:19 1506

原创 hdu 4669 Mutiples on a circle 多校第七场

先求a[n-1]和a[0]不连接的 用dp可以求 dp[i][j]表示第i为余数为j  这里用了滚动数组。。再处理a[n-1]和a[0]相连的  枚举终点 然后将前缀(en[i]表示的就是i~n-1这个前缀的余数)整个的搬到后缀中 通过余数拼接统计  #include #include #include using namespace std;#define clr(a

2013-08-14 10:41:54 643

原创 hdu 4666 Hyperspace 多校第七场

#include #include #include #include #include #include #include #include using namespace std;#define clr(a, x) memset(a, x, sizeof(a))#define rep(i, n) for (int i = 0; i < (int)(n); i++)#def

2013-08-13 21:06:00 600

原创 UVALive 2031 Dance Dance Revolution

简单dp。。。  dp[s][l][r]     l表示左脚所在位置,r表示右脚所在位置   的 最小消耗。。#include #include #include #include #include #include using namespace std;#define clr(a,b) memset((a),b,sizeof(a))const int ma

2013-08-11 20:17:16 512

原创 UVALive 2038 Strategic game

一棵树,n个节点,最少需要在节点上放几个士兵,能够观察到所有的边(即一条边上至少一个点选中)dp[ u ][ j ] 表示节点u,状态为j时的把以u为根节点的子树的边全部观察的最小值,j==0表示u节点不放兵,1表示放兵,那么dp[ i ][ 0 ] = sigma(dp[ v ][ 1 ]),d[ u ][ 1 ] = sigma(min(dp[ v ][ 0 ],dp[ v ][ 1

2013-08-11 19:22:15 518

原创 UVA 10817 Headmaster's Headache

状态压缩dp,用两位二进制来表示一门课的信息。code:#include #include #include #include #include using namespace std;#define clr(a,b) memset((a),b,sizeof(a))const int maxn = 10010;typedef long long lld;

2013-08-11 17:28:56 548

原创 UVA 10564 Paths through the Hourglass

一个由格子组成的沙漏,输出从上往下的路径中 和为s 的方案数,如果路径数大于0,输出起点编号最小对路径中字典序最小对方案。从底下直接一遍DP上来,中间分成两段,状态转移方程稍微有点不一样,设d[ i ][ j ][ k ] 表示从最后一行往上到i行j列得到值为k的数量,路径的话  从上往下枚举,如果L可行 输出L,否则输出R 这样一层层下去就行。#inclu

2013-08-11 14:48:04 575

原创 UVALive 3530 Martian Mining

一个n*m的矩形,每个点有两种矿,A矿往W方向,B矿往N方向,每个格子上建两种运送带,一种方向是w的,一种是n的,要求一个格子最多只能有一种带,而且传送带不能断,之后能运到边界才算有效,而且不能曲折,求收集到的A,B总量最大设dp[ i ][ j ] 为前i行,前j列的最大和,每个格子只可能有一种方向的传送带,要么横,要么竖,那么dp[i][j]=max(dp[i-1][j]+sumr[i

2013-08-10 18:32:15 686

原创 UVA 11795 Mega Man's Mission

洛克人最初有一把武器,可以杀死某些机器人,每杀死一个机器人,就可以获得他的武器,每个武器可以杀死某些特定的机器人,计算出杀死这些所有的机器人顺序总数? 简单状态压缩DP。dp[ S ] 表示杀死机器人状态为S(1表示死,0活着)的总方案数,先预处理出对于每个S,所获得的武器能够杀死哪些机器人。1表示可杀,0不可以。状态转移方程dp[S] += dp[S0]; 其中     S0为S的子集 即S

2013-08-10 16:26:43 599

原创 UVALive 3882 And Then There Was One

经典约瑟夫环问题,n个数排成一圈,第一次删m,以后每k个数删一次,求最后留下的数。为了处理方便,我们约定n个人的编号为0~n-1,最后答案+1就好,先不考虑m,设f[ n ]为这n个人最后留下的编号,那么f[ n ] =( f[ n-1 ] + k)%n+,f[ 1 ] = 0。根据这个递推式,一直推到n-1,第一个数我们是删m,因此答案 f[ n ] = (f[ n-1 ] + m)%n

2013-08-09 16:09:21 696

原创 UVA 10635 Prince and Princess

一开始用滚动数组写了个N^2 的LCS   果断TLE了。由于每个序列的元素都是互不相同的,所以将A序列重新编号,1-p,然后根据这个编号,对B也重新编号,那么实际上A和B的LCS问题就转化为求B的LIS,复杂度是O(NlogN)#include #include #include #include #include #include #in

2013-08-09 16:01:48 490

原创 UVALive 4731 Cellular Network

把n个数分成w组,每个组的值为这个组加上前面所有组的数字个数之和*这个组的概率之和,要使所有的这些组的和最小。因为每个组的概率之和前面要乘系数,而且是越早选越小,那么我们把所有数字按照从大到小排序,但由于一个组加进去数字如果过多,它前面的系数也会变大,使前面那些大数去乘一个比较大的系数,这里就需要DP一下。设dp[ i ][ j ] 表示前i个数分成j个组能获得的最小值,状态转移方

2013-08-09 15:49:21 866

原创 hdu4664 Triangulation 多校第六场

其实这题看懂了就很好搞了。 每次加边,不能形成三角形,所以肯定不加共点的边,否则就是自杀。 x个点,转移后相当于 i    ,    x-i-2 .加的那两个点去掉了。  SG函数打表以后,很明显是要找规律。发现周期是34.而且周期要到后面才有周期。 所以前面打表,后面利用周期。 可以参考下oeis,发现这个是经典的问题。Sprague-Grun

2013-08-08 20:12:54 838

原创 hdu 4662 MU Puzzle 多校第六场

所有合法串  以M开始    I+3U  模6  == 4 或 2   MI 例外 #include #include #include using namespace std;#define REP(i,a,b) for(int i=(a); i<(b); i++)char s[101000];bool judge(int x) { if(x

2013-08-08 19:20:45 883

原创 UVA 11404 Palindromic Subsequence

逆序后求LCS,然后找出i+j == len情况的最长最小的LCS(子序列在1~i中出现,且其逆序列在i+1到len中出现,对应于回文串偶数情况), (i+j == len-1情况的最长最小的LCS+str[i+1])(子序列在1~i 中出现,且其逆序在i+2到len中出现,注意其中包括子序列为空的情况,即回文串中只有一个字符,对应于回文串奇数情况),从这俩种情况中找出最优解#incl

2013-08-08 10:29:37 547

原创 UVA 1351 UVALive 3363 String Compression

dp[i][j] 表示  i-j这一段的最小值,那么转移方程   dp[i][j]  =  min(dp[i][i+k]+dp[i+k+1][ j]           ,(如果是i--i+k-1  这个子串的重复)min( dp[i][i+k-1]    + flag+2      )   )#include #include #include #inclu

2013-08-06 20:54:15 681

原创 hdu 4649 Professor Tian 多校第五场

状态压缩——把数据转换成20位的01来进行运算 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就得到了总体的期望。 对于每一位,状态转移方程如下: dp[i][j]表示该位取前i个数,运算得到j(0或1)的概率是多少。 dp[i][1]=dp[i][1]*p[i]+根据不同运算符

2013-08-06 20:04:07 655

原创 hdu 4647 Another Graph Game 多校第五场

若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。因为当两个人分别选择不同的点时,这一权值将互相抵消。#include #include #include #include #include #include #include #include #include using namespace std;#define c

2013-08-06 18:49:13 778

原创 hdu 4651 Partition 多校第五场

参见五边形定理。。点击打开链接#include #include #include #include #include #include #include #include #include using namespace std;#define clr(a, x) memset(a, x, sizeof(a))#define rep(i, n) for

2013-08-06 18:32:53 1109

原创 poj 3809 UVaLive 4643 Twenty Questions

#include #include #include #include #include #include #include #include #include using namespace std;#define clr(a, x) memset(a, x, sizeof(a))#define rep(i, n) for (int i = 0; i < (int)(n);

2013-08-03 20:35:52 1000

原创 UVA 10534 Wavio Sequence

题意:给你一个序列,求一个最长波浪子序列(不一定连续),满足长度为奇数2k+1 它满足前k+1个是严格递增的,后k+1是严格递减的,即相邻两个数不能相同,输出最大长度。 可以转化为经典的LIS问题,预先用O(nlogn)处理出dp1[ i ],dp2[ i ] ,dp1[ i ] 为以第i个数尾的最长递增序列长度,dp2[ i ] 为以i为开头,到n的最长递减序列长度那么ans = max

2013-08-03 17:14:37 675

原创 UVA 1424 Salesmen dp入门题

题目大意:给你一个无向联通图,在给你一个序列,要求你把它转换成另一个序列,该序列相邻两点的值要么图上是联通的,要么是相同的,要求修改的点数最小。 设dp[ i ][ j ] 表示从1到第i个位置,以数字 j 为结尾的最小修改点数,那么状态转移方程为:if(j==a[i]) dp[i][j]=min(dp[i][j],dp[i-1][k]); else dp[i][j]

2013-08-03 17:02:41 920

原创 uva 11584 Partitioning by Palindromes dp入门题

dp[i]表示前i个最少构成几个回文所以转移方程为    如果(j-i)是一个回文    则  dp[i]=min(dp[i],dp[j-1]+1)   (j#include #include #include #include #include #include #include #include using namespace std;#define

2013-08-03 16:54:54 734

原创 uva 11552 Fewest Flops

题目大意:给你一个字符串,要你按每组k个按照顺序进行分组,每组里的字母顺序任意,然后再按照组的顺序拼起来,如果相邻的几个相同的字母算一个块,拼起来后,最少的块是多少?所以要最小每组相同字母肯定在一起,所以每组枚举结尾字母即可,dp[i][j] 表示 第i组  字母j 结尾 的最小值如果第i组结尾和第i-1组结尾字母相同     如果 i组的  size==1   则 相等  否则 dp

2013-08-03 16:38:06 641

原创 UVA 1169 Robotruck

dp[i] 表示从原点出发,将前i个垃圾处理的最小距离dis[i] 表示从原点一直到第i个的总距离   所以  dis[i]-dis[j+1] 表示从第就j+1 到 i 的距离    odis[i] 表示第i个到原点的距离,w[i] 表示前i个的质量之和 dp[i]=  min(dp[j]+odis[j+1]+dis[i]-dis[j+1]+odis[i] )     j令cal( j

2013-08-03 12:39:23 833

空空如也

空空如也

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

TA关注的人

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