ACM
文章平均质量分 74
R__phoenix
ACMer
展开
-
ACM数论之矩阵快速幂
题目链接:杭电1005.一个简单的矩阵快速幂,一开始一直不理解,只是会单纯数字的快速幂,后来经人点拨,只是运算单位不同,一个是矩阵一个是数字。普通数字中的快速幂是用1来作为累乘量的,而矩阵中的单位矩阵相当于这个1.所以,很自然的,把数字快速幂中的模板代码进行修改即可。要知道的是,快速幂是为了减少相乘的次数,从而提高运算效率。。C语言: 高亮代码由发芽网提供#includeusi原创 2013-05-02 07:30:34 · 1420 阅读 · 0 评论 -
ZOJ 1649 Resuce (BFS)
RescueTime Limit: 2 Seconds Memory Limit: 65536 KB Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M Angel's friends want to s原创 2013-07-25 10:33:46 · 1066 阅读 · 0 评论 -
PKU Shredding Company(蛋疼的搜索)
搜索做了这么多,还是个渣,哎,真受不了。。。。。。题目大意:给你一个和值。然后给你一串数字,看你如果切割组合使得组合起来的数字最接近和值(但是必须小于等于给定的和值)。输出你组合出来的数的和,再输出组合后的数字序列。如果能够组合成多个符合要求的序列输出rejected,如果找不到这样的组合(组合起来的 数字序列加起来全都大于给定的和值),那么输出error。解题思路: 利用搜索里面的标原创 2013-07-22 15:13:32 · 1938 阅读 · 0 评论 -
再战 HDU 逃离迷宫
之前做过这道题目,是用BFS做的,当时可能是觉得DFS会超时,但是这个题目一看就是赤裸裸的DFS思想,做出来之后超时,但是贼心不死,感觉只要BFS DFS都是相通的,用BFS可以,肯定DFS也可以。所以决定在剪枝上下功夫客服超时 剪枝思路:题目的思路我就不说了,稍微懂得一点搜索的人都知道这个最普通的迷宫题目。一开始我是用VIS标记数组去标记走过的路来进行剪枝,但是,超时,肯定不用原创 2013-07-20 20:52:10 · 942 阅读 · 0 评论 -
hdu stars 简单的树状数组
写在前面:刚刚学树状数组,只是对几个基本操作还有树状数组的组建有了一点了解。这个题目也是看了解题报告之后才写出来的。另外,大家做一下 http://125.221.232.253/JudgeOnline/problem.php?id=1481StarsTime Limit : 2000/1000ms (Java/Other) Memory Limit :原创 2013-07-13 17:17:05 · 1108 阅读 · 0 评论 -
POJ 3468 (线段树,区间更新,查询区间)
A Simple Problem with IntegersTime Limit: 5000MS Memory Limit: 131072KTotal Submissions: 46058 Accepted: 13513Case Time Limit: 2000MSDescriptionYou have N i原创 2013-07-31 16:16:59 · 864 阅读 · 0 评论 -
zoj Additive equations
题目大意:给你一个数字序列里面的数字都是不同的,让你找出不同组合的加法式,但是等式中的加数和结果都必须在给定的数字序列中(已知数字序列中的数字不会重复)。解题思路:题目要求输出的时候首先按式子的长度排序输出,之后如果式子长度相同,那么按照第一个加数在序列中的顺序进行排序输出。先贴个我自己写的代码吧,是一堆垃圾,琢磨了好久还是没做出来,但是看了题解自后,觉得思想是完全相同的原创 2013-07-23 11:05:32 · 1056 阅读 · 0 评论 -
DP 初学者必做经典题目 数塔
//数塔////题目链接:http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?cid=4493&pid=1001&ojid=1#include#include#includeusing namespace std;int dp[200][200];int high;int temp[200][200]; int res原创 2013-08-15 17:38:20 · 1086 阅读 · 0 评论 -
学习线段树的一点心得
其实现在我越来越感觉,自己以前还是犯错误了,过于注重结果,过于注重代码的写法和AC,很多东西都没有搞清楚原理。尤其是在学习线段树的时候,还有昨天搞那个POJ 2886涉及到的筛法还有求反素数的时候,都深深体会到弄懂原理是多么的重要。以后一定要注重原理。对于线段树的学习,目前还在学习中,但是还是想把心得写下来,避免时间久了就忘了。一、对于单点更新的线段树目前遇原创 2013-07-31 10:20:32 · 1098 阅读 · 0 评论 -
PKU 2886 反素数+线段树
Who Gets the Most Candies?Time Limit: 5000MS Memory Limit: 131072KTotal Submissions: 7896 Accepted: 2352Case Time Limit: 2000MSDescriptionN children are sit原创 2013-07-30 11:42:34 · 1408 阅读 · 1 评论 -
Weed (DFS)
这个题目具体是哪个OJ的我也不知道了,是老师挂上来的。题目大意:有一片网格空地,有杂草,也有干净的土地。已知如果一个干净的土地四个方向的邻接土地有两个或者两个以上为杂草,那么它也会变成杂草。给定一个地图,问一共会有多少块生长杂草的地面。题目思路:这道题目想了好久,虽然是简单的搜索。但是,奈何我还是不会,莫非还是没摸到搜索的窍门。但是还是要多做。我一开始的思路原创 2013-07-28 10:30:08 · 1270 阅读 · 0 评论 -
POJ 2386 Lake Counting
题目传送门:http://poj.org/problem?id=2386题目大意:给你一张图代表农民的田地,其中'W'代表有水的格子,‘.’代表干地。有水的格子连在一起就是一个水池,问给定的一块土地上有几个水池。题目思路:实际是是个很简单的题目,貌似是用BFS做,但是我还没想好,稍后奉上BFS版本。我用的是DFS做的,把 图读完之后,开始遍历,遇到W字符的时候开始进行深原创 2013-07-25 15:34:03 · 1181 阅读 · 0 评论 -
Fight
不管什么情况,我都会勇往直前。。。。。我是疯子,我爱编程~~~~原创 2013-07-23 14:58:04 · 1372 阅读 · 0 评论 -
HDU PING PONG 树状数组+离散化处理
写在前面:之前看了很多解题报告,都觉得他们代码是最普通的方法,如果数据过大的话,肯定会爆掉。之后请教了队长,才知道,要对数据进行离散化处理,这样能够避免数据过大已经程序的崩溃。Ping pongTime Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total原创 2013-07-14 13:22:14 · 1156 阅读 · 0 评论 -
01 背包基础题目
这道题目很简单,但是数据有一个很坑人之处,就是,有的骨头有价值,但是他所占的空间为0,如果你不知道你的代码为什么总是WA的话,可以试试下面这组数据12 020 10 1答案应该是20.当然,这是按照普通的二维DP来做的,没有进行优化,其实感觉DP就是背包啊用了两种方法,优化的和没优化的,就是想多练练//Bone Collector///原创 2013-08-18 18:21:01 · 1011 阅读 · 0 评论 -
STL容器-----HDU 水果
很久没写博客了,也是很久没有抽出 时间来编程,刚开学还是先适应了一下课程,幸好一周之内有几天是只有一节课的。这半年还是按照自己的计划去练习,第一个月是STL和一些简单的数学题,来一遍把以前的专题都复习一下。不得不说STL确实方便了许多,尤其是在处理字符串上,是个很有力的工具,但是还是尽量自己写,不调用库里面的东西,不过最近主要练的就是这个 水果 Time Limit :原创 2013-09-17 07:18:26 · 1298 阅读 · 0 评论 -
sscanf函数的妙用
#include 定义函数 int sscanf (const char *str,const char * format,........);函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中转载 2013-11-25 21:41:15 · 1032 阅读 · 0 评论 -
关于大数运算(不完整版)
大数问题,基本都是把数先以字符串的形式读入,然后转换为整型数组(个位存在数组0的位置),之后就是模拟手算。由于最近重新翻看白书,觉得LRJ的高精度运算的BIGN类是个好东西,以后比赛的时候可以把这当成模板来用。 大数加法:大数加法,要处理的问题有三个,一个是整型数组的储存问题,还有一个就是进位和本位和的问题以及虽然两数相加完成,但是如果还有进位的话应该继续处理。在做相加运算的时候应原创 2013-12-12 21:43:20 · 1535 阅读 · 1 评论 -
线段树 poj 2528 离散化处理
Mayor's postersTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 34272 Accepted: 9932DescriptionThe citizens of Bytetown, AB, could not stand that the c原创 2013-08-02 09:30:39 · 942 阅读 · 0 评论 -
POJ 1159 Palindrome
网上看了很多解题报告也没看太懂,到底为什么这么做,除了为了节省内存之外用了滚动数组的方法,具体的思路还是要重点理解。我们要求一个字符串,加入至少几个字符,使这个字符串变为回文串。那么怎么算呢,把这个串反过来,然后求这两个数列的最长公共子序列,那么这个公共子序列不就是原字符串变为回文串的基本结果么,之后我们要做的就是添加一些字符,融合原来字符串中的除了公共子序列的字符,变为最终的一个字符串,那么原创 2013-08-16 16:53:09 · 942 阅读 · 0 评论 -
杭电 Prime Ring Problem
解题思路:题目是一道很典型的dfs搜索题目,思路很清晰,很容易想到。想组成这个素数环,要有n步,而每步都有n-i(i是变动的)种可能,所以利用dfs深搜,并融合回溯法,这一步搜不到的话既返回至上一步进行。因为一点不能同时选择两次,所以要用标记这个点已经被选中,如果这一步搜索失败,那么要把这一步所标记的定点都复原,才能返回上一步进行搜索。我没有在dfs里面直接判断素数,因为我觉得那样程序会慢原创 2013-05-26 09:37:03 · 1132 阅读 · 0 评论 -
杭电 1501 zipper(典型dfs)
写在前面的:最近一直在做搜索,这个题目也是DFS一道很典型的题目,一开始想不用搜索做,结果发现思路是错的,大神给了我几组样例之后就只能重拍了。所以开始考虑DFS.一开始没看出来时搜索,所以按自己方法做,但是仔细思考一下还是看出来了。解题思路如下:题目要求是给你三个字符串,前两个字符串长度在1--200之间,这说明没有空串。第三个串是前两个字符串的组合,长度等于前两个字符串的长度之和,第原创 2013-05-27 12:34:05 · 1250 阅读 · 0 评论 -
HDU 并查集 Find them, Catch them
写在前面的:这道题目,想了好久,也是刚刚开始做并查集专题。对模型还不是太熟悉,总的来说,一般的并查集题目有三个步骤是不能缺少的,1,构建,2,查找,3,合并。第一步也就是把每个节点都当做单个的集合处理,第二步就是找根节点(但是期间的方式有很多种),第三步,就是合并两个集合,即把一个连通分量中的根节点,连接到另一个去,使之成为一棵树。这只是一个基本的模型,也就是说,你做并查集的题目在原创 2013-06-12 11:10:55 · 1198 阅读 · 0 评论 -
杭电hdu 逃离迷宫
写在前面的:之前没有做过迷宫题目,所以先拿到题目想到的是dfs,因为很符合dfs的模型,要到达终点有很多步,每一步又有很多可能,但是,考虑到迷宫规格太大可能超时,而且还有拐弯次数这个限制条件,所以不好处理。以前的国际象棋那个题目用了bfs,感觉差不多都是迷宫类型,所以决定用bfs试试。但是这个BFS是和普通的不同的,普通的是邻接定点入队列但是这个却不是。解题思路:输入的话,原创 2013-06-02 13:45:10 · 1466 阅读 · 0 评论 -
因子和阶乘
输入正整数n,把n!分解成素因子相乘的形式。从小到大输出素因子的指数,要忽略最大素因子之后的素数的指数same input5same output5!=3 1 1具体要求:白书p82代码如下:#include#include#include#include#define LL long longusing namespace std;int原创 2013-06-03 16:03:29 · 855 阅读 · 0 评论 -
HDU 2964 数论
题目的大致意思,就是说按照n = a0 + a1*p0 + a2*p0*p1 + a3*p0*p1*p2 + ... 这样的形式把n进行分解,pi是素数。已知,ai就是每一项素数相乘的系数。这道题目应该从后面往前面想,先找到那么现在我们要做的任务有以下几点:1。打素数表,并且把逐个素数相乘的结果存在一个数组中。例如2 2*3 2*3*5.....因为题目当中的n是32位整数,所以,素数原创 2013-06-07 15:08:17 · 1068 阅读 · 0 评论 -
hdu play on words
解题思路:一开始没有搞出来,和正确的思路很接近,想用结构体,存一个单词的第一个字母和最后一个字母。然后把它们连起来,但是在判断首尾相连的时候没有想出来怎么写。而且在输入的问题上,以为一个单词就应该开一个数组,因为最后要输出这些单词,所以要先存起来,但似乎太麻烦了,一般如果你觉得这道题目太麻烦了,那基本都是错的了。因为这也不是模拟题。是有对应的方法的。后来看到一个大神的解题报告,里面用了欧拉原创 2013-06-19 16:08:51 · 1001 阅读 · 0 评论 -
hdu play on words(大神写的)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116题目大意:给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思。但是如果有多个重复的单词时,也必须满足这样的条件才能算YES。否则都是不可能的情况。解题思路:欧拉路的基本题。只要知道就可以做出来了。关于欧拉回路和欧拉路径定义:转载 2013-06-18 21:29:38 · 975 阅读 · 0 评论 -
并查集------无线网络
题目大意:问题 C: 并查集_无线网络时间限制: 5 Sec 内存限制: 128 MB提交: 183 解决: 29[提交][状态][讨论版]题目描述一场地震在东南亚发生了。不幸的是ACM组织通过电脑建立的无线网络遭到了毁灭性的影响—--网络中所有的电脑都损坏了。在陆续的维修电脑之后,无线网络有逐渐开始再一次运作了。由于硬件的制约,每两台电脑只能保原创 2013-06-24 11:09:47 · 1224 阅读 · 2 评论 -
博弈论
以下是我从网上收集的关于组合博弈的资料汇总:有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每转载 2013-07-16 17:23:59 · 973 阅读 · 0 评论 -
SG函数
博弈之SG函数 定义:sg(x) = mex ( sg(y) |y是x的后继结点 )其中mex(x)(x是一个自然是集合)函数是x关于自然数集合的补集中的最小值,比如x={0,1,2,4,6} 则mex(x)=3;什么是后继结点?所谓后继结点就是当前结点经过一个操作可以变成的状态。比如对于娶4石子游戏,假如每次可以取的数目是1,2,4,当前的石转载 2013-07-17 18:05:08 · 831 阅读 · 0 评论 -
2013NBUT暑期集训成果赛 赛后总结以及解题报告
//[C] AmeriDarts////水题,就是求两个数列中差值最小是多少,普通的暴力遍历就行了,没什么好说的//#include#includeint num1[2000];int num2[2000];int main(){int i,j;int A,B;int min=99999;while(scanf("%d%d",&A,&B)!=EOF){min=99原创 2013-07-20 15:44:27 · 1320 阅读 · 0 评论 -
DP HDU 1003
到目前为止,我还是不能一次就找到状态方程,以至于DP的题目,我 做不出来。感觉了解了点DP的思想,学东西还是不能太死板,有的东西,不一定要用到规矩的DP的东西,但是却用到了DP的思想。题目很简单,就是求一个序列中字串和最大,并且要求输出起点和终点。如果我们把所有的数字都输入到数组之后,通过DFS的方式去搜和值最大的话,太麻烦而且 还可能超时,所以,我们采用输入一个处理 一个的方式,第一原创 2013-08-19 12:56:35 · 872 阅读 · 0 评论 -
HDU To The Max 二维DP
To The MaxTime Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 16 Accepted Submission(s) : 10Problem DescriptionGiven a two-dimension原创 2013-08-23 09:11:01 · 1061 阅读 · 0 评论 -
大数取模与快速幂取模模板
大数取模模板: while(scanf("%s", num) != EOF) { int len = strlen(num); __int64 ans = 0; for(int i = 0; i < len; ++i) { ans = ans*10 + (num[i]-'0');原创 2013-08-23 18:04:23 · 3855 阅读 · 0 评论 -
hdu Super Jumping! Jumping! Jumping!
这个题目是一个DP的题目,求的就是给定序列中递增子序列的最大和值,但是除了用DP做之外还可以用线段树来做,是个很神奇的事情。一、DPDP的思路很简单,还是运用了我觉得是最优子结构和递推的思想,每次插入一个数字的的时候都保持前面序列的递增子序列和是最大的,即DP[i]保存的都是每个数字之前包括这个数字的最大递增子序列之和。每次插入一个数的时候,都判断这个数之前的序列里面是否有原创 2013-08-24 08:47:42 · 909 阅读 · 0 评论 -
二分法, 二分排序
这几天看了一下二分法,也做了两个题目,感觉二分法中比较难以把握的就是一个边界问题,有的时候很可能因为考虑不好到底是取上确界还是下确界的问题,就会WA。先看二分法的标准形式吧这是 二分法的最标准的形式,二分法其实就是二分查找,一些排序算法以及在一个区间内求解的时候,查找可能很慢,那么这时候用二分法会大大减少查找的时间。对一个序列应用二分法,那么这个序列必须要保证是原创 2014-01-18 14:53:45 · 2251 阅读 · 2 评论