自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Phantom

努力~~~

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

原创 HDU 1588 比较综合的一个矩阵快速幂

这个题目感觉是比较综合的一个题目了,这个用了好几个公式,很值得记住啊。一开始在之前遇到了一个斐波那契数列的问题如下:•eg.求斐波那契数列第n项(n•f[0]=0,f[1]=1,f[i]=f[i-1]+f[i-2](i>=2)这个题目的求解的话,就是建立一个矩阵的递推式,然后矩阵快速幂就可以轻松解出来的。这个就是一般的对斐波那契数列的推导,其中那个2*2的矩阵暂记A

2016-10-11 22:16:39 343

原创 POJ 3233

这个题,一开始就没想到竟然可以拿子矩阵的样子进行呈现,作为一个曾经数学系的孩子来说真的是还惭愧了。还搞了半天了。唉,这个题的看到还有递归的写法,先说说正常的快速幂的写法,这里在网上看到两种矩阵的递推式子,这个是第一种推导方法也就是我的做法,只需要最后在右上角的矩阵再减去一个E就可以饿。其间的可以用快速幂来求解。然后就是第二种推导方法这是第二种推导方法,也是可见明显可以得出答案的。

2016-10-09 22:08:50 524

原创 HDU 4920

这个题有两种解法,一种是先对矩阵进行%3,然后在3次方循环里判断如果元素如果是0,则continue不进行乘积的累加的结果。能起到优化的作用还有一种就是对矩阵进行某一个进行转置后,再进行两个矩阵的乘积累加。也能起到优化参见:http://wenku.baidu.com/link?url=261XeEzH-AZkFGPiN63t1nnojoQF50yiuMoviHroGjVXjjRlxFcv

2016-10-09 19:23:44 354

原创 UVa 10655

祭奠下我又一个wa了20+次的题,(都是泪啊。~~),这个题的也其实就是一个矩阵快速幂,但是写的时候有一些小坑,比如数据都要取long long 的,改了后我还是 wa,其实是结构体的里的矩阵也要ll,然而这个 一直忘记改了,就这样一直wa。。。。。。。。。。。还有就是在重载 * 运算的时候的行列大小要搞对,m*n 的与n*p的相乘,可以得到m*p然后中间的变量k的值就是最大到第一个矩阵的列数或者

2016-10-09 11:48:49 287

原创 HDU 1575

开始搞一搞矩阵方面的东西把,第一个接触的快速矩阵幂,也是一个模版题,不过也不错,能加快对这个的理解。快速矩阵幂的学习:http://www.cnblogs.com/vongang/archive/2012/04/01/2429015.html点击打开链接然后就是对这个的解法了,套用板子即可,只不过需要在计算出数据的时候记得MOD一下,不然就会出错的。/*#include#include

2016-10-09 00:01:38 314

转载 取模运算的性质

给定一个正整数p,任意一个整数n,一定存在等式 :n = kp + r ;其中 k、r 是整数,且 0 ≤ r 对于正整数 p 和整数 a,b,定义如下运算:取模运算:a % p(或a mod p),表示a除以p的余数。模p加法: ,其结果是a+b算术和除以p的余数。模p减法: ,其结果是a-b算术差除以p的余数。模p乘法: ,其结果是 a

2016-10-08 23:54:23 560

原创 卡特兰数

个人赛被这个傻逼一样的题目给卡了好久啊,因为完全没接触过这个卡特兰数,实际上就是套公式就可以了,而我写了个dfs,虽然数能打出来是正确的,但是绝对是超时的啊,唉,悲哀啊,还是题量不够啊。!!!卡特兰数h(n)=c(2n, n)/(n+1),这样的通项目即可。1表示入栈,0表示出栈在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。从中减去不符合要求(由左而右

2016-10-07 23:46:42 267

原创 POJ 1112 WA到死

一路WA到死啊。这个题本身就比较有难度了,完全是给跪了,整体先是求补图,然后做二分染色,之后通过DP来求的最佳的分组状况。看下POJ 上的分析,和一些网上的代码才能明白过来,特别是二分染色 是第一次遇到啊,这个dfs的写法还是比较恶心的。这里的DP也是非常的难想成做可能不可能的这种01的DP值。首先,我们分析一下分组的要求:1、把所有的人分成2组,每组至少有1人;2、每组之间的人两

2016-10-06 10:32:28 714

原创 POJ 1015

一个比较有新意的DP,也是感觉比较值得学习的DP,这种DP的题目就是看着不像一般做的背包之类的,而实际上又是相差不多,特别是对于状态参数的定位和循环的写法,这是很值得学习的。本题首先分析数值范围的时候,就应该想得到的就是把这个把这个数组开成800+,然后数据进行移位m*20,之后的就是循环求最值和路径的求解了。引用:问题的关键是建立递推关系。需要从哪些已知条件出发,才能求出f(j,

2016-10-05 19:51:29 245

原创 HDU 1861

wa了几次,原因在于读取数据和处理四舍五入的时候的写法的不适当,学习了网上别人的代码,还是有一定借鉴意义的。先贴上我修改后A掉的代码#include#include#include#includeusing namespace std;int a[110],tag,S[110],E[110],ci,h,m;double sum;char s[1];char ss[5];

2016-09-29 00:55:15 302

原创 HDU 1863 最小生成树

在学过了并查集之后 ,再看白书上的这个kruskal的写法,其实还是很简单的明了的。也是我写的图论里的最小生成树的第一个题目,可以作为模版啊#include#include#include#includeusing namespace std;int n,m;int u[5000],v[5000],w[5000],p[5000],r[5000];int cmp(const

2016-09-28 23:57:44 231

原创 HDU 1864

来个DP练练手,这个题就是个01背包没什么难度的,稍微考验码力的就是字符串的处理读取数据的时候了,然后就是超内存了一次,只需要分析判断好内存最大开多少就好了。因为最多是30张发票,每张面额不超过1000,因此是30000,后来在01背包过程时数据被扩大100倍,因此最后是3000050#include#include#includeusing namespace std;int

2016-09-28 20:44:55 271

原创 2016ACM北京赛区网络赛第三题A simple Job

这个题像极了一个字典树或者是AC自动机的问题,一开始队友就一直告诉我这点,也让我在这题上写了好久,结果是各种麻烦 各种wa,然后过后找了题解看了下,发现其实拿map搞一搞就可以了,map和vector这种数据结构还是非常的方便好用的。整体思路就是:先读入字符串,然后当字符串不是#作为终结的时候,就对字符串先进行简化处理,先对不同单词之间的逗号句号还有空格进行处理,让这个字符串进行简化即可。然后

2016-09-27 18:31:50 527

原创 纪念第一次省赛归来

今天是第一次出去比赛,应该是很开心的,毕竟是努力了这么久得到一次出去的机会了,很是兴奋,回来后收获颇丰啊,感触良多。特别是对于acm的学习方面的想法和一些对比赛准备的过程的想法。1.首先吐槽下小事,比赛务必要把自己的状态调整好,不要被外物影响了,比如我这次被出租车司机摇晃的浑身难受的,这次其实我的状态是比较不好的,有点抱队友大腿的感觉。2.因为这个队伍是新组的,和队友一起组队打的比赛也就之

2016-09-23 23:53:45 519

原创 HDU 1796

容斥的一个题,site巨巨讲的课的第一个题。入手后还是比较不错的题的,这个dfs如果不好理解一定要模拟一下解题思路:容斥原理地简单应用。先找出1...n内能被集合中任意一个元素整除的个数,再减去能被集合中任意两个整除的个数,即能被它们两只的最小公倍数整除的个数,因为这部分被计算了两次,然后又加上三个时候的个数,然后又减去四个时候的倍数...所以深搜,最后判断下集合元素的个数为奇还是偶,奇加偶减

2016-09-15 17:34:22 405

原创 HDU 2955

又开始练DP了,= =!,没办法 ,新组的队友也是DP弱鸡,只能开始练习了。此题看完后就是一个01背包,一开始想到是如果把背包容量当成概率,然后能抢到的前当成价值,然后一开始就把概率乘以1000000后化成int,再进行01背包,其实这一开始就是错误的了,这个题的概率当抢了两个以上的银行的时候不应该是常见的01背包的那种累加的情况,而应该是累成的情况。这点需要注意下。还有就是价值应该换成不被抓

2016-09-14 21:44:28 255

原创 POJ 3667

设计到了区间合并方面的了,其实和一般的线段树没什么太大的变化,但是实际有点难的就是这个不同区间信息的维护也就是延迟标志和信息维护的时候需要注意一下。这个题其实思路对于第一次写这个的还是蛮不好想的,参考博客:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html 点击打开链接  文字解析相当详细。#include

2016-09-12 23:34:00 356

原创 POJ 3013

这个题目就是一个求最短路,然后保证整个图是一个连通图就好了,如果不连通的就表明了这个圣诞树是无法构成的,那么输出no answer,然后如果是连通的,在求出了所有点到1的最短路径的情况下,利用相乘累加的方式就可以求出答案了。#include#include#include#include#includeusing namespace std;typedef long long

2016-09-07 23:30:29 334

原创 UVa 1592

练习一个STL的题,感觉蛮有难度的,在一些这种简单的STL操作应用,显然我还不够熟练啊。#include#include#include#include#include#include#includeusing namespace std;int n,m;char a[100];string s;map p;//把字符串对应成数字编号struct node{

2016-09-05 20:34:54 298

原创 POJ 2155 二维数组

这题和前面的1195有点类似,也就让我发现了二维树状数组的题好像都有这种特点,就是矩阵的重叠需要加减来实现抵消。极力推荐这篇文章:http://download.csdn.net/detail/lenleaves/4548401点击打开链接#include#include#includeusing namespace std;const int maxn=1010;int x,n

2016-09-02 22:06:52 225

原创 POJ 1195 二维树状数组

二维树状数组的模版题。写这个题的时候注意不要把a数组直接理解为普通的二维矩阵,了因为i和j的累加和累减方式不同,所以实际上不是一格格的跑的。应该按照一维的树状数组的推广来理解即可。#include#include#includeusing namespace std;const int maxn=2000;int num,n,x,y,z,h;int a[maxn][maxn]

2016-08-29 19:55:13 292

原创 POJ 2352 树状数组

这个树状数组写起来就轻松多了。因为这个点的输入的要求比较特殊,刚好都已经构成了写树状数组的要求,实际上只需要把数据直接进行树状数组的add和sum操作即可。可以模拟很轻松得到逻辑的答案,唯一要注意的就是这些点坐标是从0开始的,处理一下就好了。#include#include#includeusing namespace std;const int maxn=32010;int n

2016-08-29 19:52:44 348

原创 POJ 2299 树状数组

第一次自己在题里遇到了离散化,也就是这个东西困了我好久的,离散化一般的处理感觉好多种的写法,但是有好有坏,选择合适的写法写即可。1.        for(int i=1;i        {            scanf("%lld",&a[i]);            p.push_back(a[i]);        }       sort(p.begin

2016-08-29 19:48:54 341

原创 UVa Live4255

第一个有关拓扑排序的题目,光看题目很难想到这题是拿topo来做的。看了白书上的分析才知道拿topo来做,并且也用到了常用的连续和转化为前缀和之差的思想,然后奖前缀和标号作为图的结点利用大小+-来进行连接即可。然后由得大小关系的原因所建成的图,所以 每一层的topo得到可以入队列的入度为0的结点的时候,都可以将该结点进行赋值,然后最外层的肯定是最大值,每一层减一即可。这样做的话就不需要再让pre[0

2016-08-28 20:05:39 379

原创 UVa 10047

这个题目是简单搜索的加强版了,稍微显得复杂,不过可以学到状态的另外定义,可以多开几维即可。bool vis[30][30][5][5];  然后循环轮子颜色可以采用取模pp.c=(temp.c+1)%5;转向的循环读也是一样的。 pp.d=(temp.d+i+4)%4;#include#include#include#include#includeusing namespace

2016-08-27 22:05:19 386

原创 POJ 3268 基本dijkstra

比较简单,没什么好说的,几乎就是模版题了。#include#include#include#include#includeusing namespace std;const int maxn=100010;const int INF=1e9;int n,m,x,a,b,c,d[maxn],vis[maxn];struct Node{ int d,u;

2016-08-25 16:32:03 217

原创 POJ 1201 差分约束

最近做了好几个差分约束了,本意是来学习图论的,没想到学到的都是这种利用图论来解不等式的方法了,23333,还是不错的。在此总结一下,首先差分约束的概念也方法可参考该博客http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 点击打开链接然后就是这个题参考了http://blog.csdn.net/u013480600/articl

2016-08-25 16:00:42 230

原创 POJ 1364 差分约束

解题的思路比较奇葩。第一次见到啊,也不知道别人是怎么看出来这种情况下就是差分约束也就是可以用到图论,表示真的好迷啊。看来对差分约束的概念还很差呢。。#include#include#include#include#includeusing namespace std;const int maxn=10005;const int INF=10000000;int n,m,si

2016-08-24 21:36:42 210

原创 POJ 3159 松弛操作 差分约束 SPFA

这个题的数据比较奇葩  SPFA里必须拿栈才能过,队列就过不了,而且在建图的时候最好不要拿vector也好像会超时,比较尴尬。#include#include#include#include#include#includeusing namespace std;const int maxn=150010;const int INF=0x3f3f3f3f;int n,m,u

2016-08-24 16:21:34 275

原创 POJ 3660

这个题就是一个floyd就可以了,不过在判断的时候要记得判断位置确定是他与其他的n-1头牛有了确定的关系可以是上或者下。 if(d[i][j]||d[j][i])#include#include#includeusing namespace std;const int maxn=4510;int n,m,a,b;bool d[maxn][maxn];//bool型比int少一

2016-08-24 14:31:16 167

原创 HDU 1317 一路wa到西天

简直是对自己无语啊,代码风格出了点问题,自己加了一些不应该加的东西,结果wa到没边了。这个题目就是需要考虑的就是正环的问题,还有就是是否1和n连通的问题。连通性考虑floyd算法即可。然后这个判断正环的问题就需要bellman_ford了,写这个的时候发现了其实bellman_ford不必按照模版上教的一定要初始化d为INF,其实是可以初始化为0,然后求最大路的。因为题目要求的是问的是是否

2016-08-22 20:51:02 463

原创 POJ 2387优化后dijkstra写法

这里尝试着用了优化后的写法,利用了优先队列对d值小的点进行优先选择为下一个结点进行操作。然后这里采用了图论学到的第二种写法struct Edge//第二种图的写法{    int u,v,w;};vectoredge;vectorG[maxn];void add_edge(int u,int v,int w){    Edge p;    p

2016-08-22 13:09:47 237

原创 POJ 2387

初入图论的第一个题目,也就是一个简单的最短路的问题,提前学习了链式前向星,也就在前半部分写来练练手,其实用数组就可以实现了,忽略前面的,这个题的小坑就是可能会有重边,这样就需要在lend存储的时候进行判断来存储最短的uv之间的边即可了。#include#include#includeusing namespace std;const int maxn=2010;const int N

2016-08-22 11:27:51 196

原创 HDU 2222 板子题

搞了一个AC自动机的题目,看了白书上的讲解,其实就是Trie和KMP的结合,不过白书上的last数组不是很好理解的。搞这个知识点一个下午结果还是有点迷迷糊糊,结果大手子们告诉我这个可以套板子的。然后就拿了一个板子往里面套。这个题目要注意的是可能输入的keywords会可能重复的,那样的话在插入insert的时候就需要对叶子结点进行++,而不是置为1或者某个值,然后在find的时候就可以进行累加

2016-08-22 09:48:06 229

原创 UVa Live3026

现在再看白书上的这个例题,这个也就是一个循环节的问题,那么由得前一篇博文POJ 2406遇到的问题即可轻松得到解决方案,也就是len/(len-next(len))的应用,这个公式真的是非常的方便的啊!现在这个题目需要的是判断前i个字符组成的前缀是其中某个字符串重复K次所得,那么这个K就可以由上述公式轻松计算,然后只需要一个for循环在2~n里面跑把满足能求出的K每次都输出即可。#incl

2016-08-20 19:55:53 237

原创 POJ 2406

轻松A过了,感觉我的想法还是比较麻烦的,网上找来的大神们的做法真是把next数组考虑到了极致了。我的做法真的是又长又臭。。。我考虑的是每次把串1的前几个粘过来然后重复粘使得串2的长度和串1的长度相同的时候再KMP判断可行的话,那么n的最大次由几次的可行KMP里的重复长度来找出即可。#include#include#includeusing namespace std;const

2016-08-20 18:53:53 199

原创 HDU 2203 KMP第一个题

接触了一下KMP算法,记得大二上学数据结构的时候就已经接触过这个算法了,当时是一脸蒙蔽,完全看不懂啊,现在再看是要轻松不少的,特别在网上寻找了那么的资料看了之后,特别是这篇讲的非常到位http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html点击打开链接然后就是找到了一

2016-08-20 16:14:02 213

原创 UVa 11732 难难难啊

白书上的第二个字典树,这个题目需要用到字典树的一种新的写法,用到了在分支的时候采用的左儿子、右兄弟的写法,非常的实用的写法,也是非常的新颖的。这个题难度还是蛮高的,数据要用LL,不然会溢出,因为字符集比较大啊!可参考博客:http://www.cnblogs.com/372465774y/archive/2013/04/10/3012071.htmlhttp://blog.csdn.net

2016-08-20 12:29:58 276

原创 UVa 1401 字典树+DP

白书上的题目真心有点无奈啊。这个感觉单单字典树其实还好的,但是一加了个DP,我就有点束手无策了,还是思维弱啊,DP这种东西真的是不知道怎么弄了。引用:想到递推:开始是从左往右推:dp(i)表示子串s[0, i]的拆分方案数,然后枚举它的每个后缀判断其是否在字典树中,转移方程:dp(i) = { sum(dp(i - len(x))) | x为s[0,i]的后缀且出现在字典树中 };但是

2016-08-20 10:02:48 271

原创 HDU 1251 字典树的第一个题

开始入手字典树了,第一个题其实就是一波三折啊!这个题目一开始在我看了白书上的基本代码之后写的然后就一直wa了,感觉自己写的是对的啊,但是一直找不出毛病,稍后在最后面贴上代码,希望有人看出来能给予指正,不甚感激。这个题目的话作为第一个题来说让我学会了两种写法,一种是静态的写法,另外一种是动态的写法,静态的写法感觉更加好写一些,只需要在开点内存的时候把内存开的大一些即可了,然后动态的写法就是每次到

2016-08-19 21:46:45 219

空空如也

空空如也

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

TA关注的人

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