- 博客(15)
- 收藏
- 关注
原创 三天总结
这三天效率好低……做了一道平面最近点对,刷了几道其它的水题,然后一场CF,几场练习赛今天练习赛还做得无比渣……三分法也写得好慢……只比时间上限快300ms左右而已。今天继续努力刷题吧……好想快点摆脱这些计算几何Orz……我发现计算几何简直软肋……
2013-10-04 03:33:55 486
原创 poj2002 squares 哈希 计算几何
题意,给出平面上n个点,求能形成的正方形个数挺简单的题,用两个点来枚举。首先把所有的点用哈希函数处理后存起来,然后枚举两个点,以这两点为正方形同一边的两顶点,求出另外顶点的位置,然后查找这两个点是否存在即可。这题用的静态链表做的,当成练习。同时注意下哈希函数,发同用x*x+y*y会TLE,毕竟也可能会有挺多相同的,然后为了区别x和y的正负性,把哈希函数改成x*x+y*y+x+y,我觉得这个
2013-10-01 14:14:49 598
原创 hdu4709 herding 计算几何 三角形面积 枚举
题目给出了n个点,求任意几个点能围成的最小图形的面积。看到题的开始在图形的形状上犹豫了一上,忽然想到一定是三角形,因为多边形必然可继续切割成三角形。于是转换成了枚举三点,判断面积。注意共线情况。本次用到了运算符重载#include#include#include#define MAXN 1005using namespace std;typedef struct no
2013-10-01 08:48:51 701
原创 poj1032 Trees made to order 卡特兰数应用
这道题的递归也想了超级久,虽然我已经知道卡特兰数了……感觉这是个非常奇特的数列了,先看下递推公式c[n+1]=(2*(2*n+1))*c[n]/(n+2);这个数列又是和排列组合相关的,虽然在不知道前,推过二叉数的组合方式,隐隐觉得应该是排列组合,但没想到到底是什么公式,查了题解才知道(到现在只是用到了结论,具体怎么推出来的还不太清楚 Orz)。c[n]代表着节点为n的二叉树有多少种组
2013-09-30 16:38:14 802
原创 hdu 1710 binary tree traversals 二叉树遍历
根据二叉树的前序遍历和中序遍历求后序遍历的题。一开始的方法是根据前序遍历和中序遍历构建二叉树,再从二叉树开始后序遍历。事实证明我还是too young too naive,一开始还好好的,后来这递归被我越写越糟糕,都看不下去了,好不容易程序运行起来了,对了下答案也没问题,就交了上去,结果返回了RE……………………好难过啊QAQ于是去搜题解,发现有人说用结构构建树用了太多空间导致RE,但
2013-09-30 09:39:47 767
原创 UVa 11019 Matrix Matcher AC自动机 二维匹配
先给出n*m的字符矩阵T,再给出一个x*y的模板字符矩阵P,问P在T里出现了多少次这算是二维的查找了,这挺有意思的,一维的单个模板串匹配用KMP,多个的话升级到树,当一维升级到二级,多个又降回到了单个……嗯,回来说下这道题……基本算法已经很明了……如果T含P,至少,T包含P的每一行,即至少,必然存在T的某行包括P的某行因此,先把P的每行构造成自动机,再一行行地判断T,开一个二维数组
2013-09-02 23:58:33 680
原创 UVa 11468 substring AC自动机+记忆化搜索+全概率公式
题目是给出K个模板串,再给出k个字符,这些字符包括了模板串里的字符,也有不是模板串里的字符,然后再给出这些字符的概率,随机选择L次后,就能得到一条L长的随机字符串,问这个随机字符串不包括任何一个模板串的概率首先把K个模板串构造成自动机,然后把所有的结尾做一下标记,以提示该节点不可到达,因为如果走到当前结点,即意味着出现了一个模板串然后就是根据全概率公式了,首先先来理解一下全概率公式比如
2013-09-02 23:08:03 726
原创 LA 4670 dominating patterns AC自动机
题意:有n个模板串,给出一个文本串T,求哪个模板串出现的次数最多,注意可能有重复模板串,因为要用到map来标记做了几天自动机,照着模板来,到现在基本理解,真是满眼泪……这道题算是比较典型的自动机了(基本上就是裸题了吖QvQ),主要即判重,利用map来好方便要判重是因为,比如重复输入abaaba那么在第一次插入的时候,val[最后一个a的节点]=1在第二次插入时,val[
2013-09-02 22:35:34 566
原创 kmp算法巩固 以poj3461为试验
本来计划下一步去搞AC自动机的……忽发现它以KMP为基础……虽然假期练过,但基本内涵都不太清楚了,都是直接套模板Orz……是本次来再补一下(⊙﹏⊙) ,总算把自己的板给写出来了,真是可喜可贺XD以下先是KMP的重新理解部分:用parent[]表示母串,son[]表示子串当比较母串和子串时,以abcdefg和bcdf为例母串: a b c d e f g子串: b c
2013-08-28 22:41:46 481
原创 UVa 11732 strcmp()函数 trie
QvQ终于搞出来的,条件判断略多题意是:给出n个字符,用strcmp()来对它们两两这间相互比较,求要比较总次数n在[1~4000]之间strcmp()的比较方法很有意思,会对两个字符串对应位置进行比较,如果相同再比较是否为'/0',所以对于“a”和"a"这两上字符串,要比较4次第一次,比较'a'和'a',发现它们相同,再看‘a'是否等于'\0',不等于,继续比较,到目前为止,比较
2013-08-28 14:16:14 541
原创 LA3942 remember the word trie+dp
题意:给出n个单词组成字典,再给出一个目标字符串,求把这个字符串分解成若干个单词的连接方案(字典中的单词可以重复使用)。比如:输入 abcd, 再给出四个单词a, b, ab, cd。abcd可以分解为(a, b, cd), 或(ab, cd), 共两种方案想法为:用dp[i]表示从i开始的后缀,则dp(i)=sum{d(i+len(x))|单词x是s[i...L]的前缀}具体解释:以
2013-08-26 14:20:10 587
原创 poj 1179 polygon 动规
题目链接:http://poj.org/problem?id=1179翻译:“多边形”是一个关于有N个顶点的多边形的游戏。以图1为例:这是一个N为4的多边形。每个顶点都代表一个整数,每条边都被一个操作符标记,这个操作符要么是“+”(加号)要么是“*”(乘法)。边由1到N进行标记。游戏的第一边是去掉一条边。之后的步骤如下:选择一条边E和它连接的两个顶点V1,V2;然后用一
2013-06-30 22:51:58 534
原创 hdu2602 bone collector 01背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602翻译:#问题描述多年以前,在Teddy的家乡,有个叫骨头收集者的人。这个人喜欢收集各种各校的骨头,比如说狗的、奶牛的,有时候他也去墓地……这位骨头收集者有一个很大的、容量为V的大袋子,在他收集骨头的路上很很多骨头。显然,不同的骨头有不同的价值,占用不同的空间。现在告诉你他路上每一块
2013-06-30 22:11:59 516
原创 hdu1257 拦截导弹 最长上升子序列
动态规划和最长上升子序列下降子序列的最小个数等于最长上升子序列的长度if(height[j]dp[i]) dp[i]=dp[j]+1;dp[]是指到了第i个数时,以第i个数为结尾的上升子序列的长度如果第j个数比第i个数小,则对于序列x1, x2,,,,,,,,xj, xi...来说,如果dp[j]+1比dp[i]大,则dp[i]=dp
2013-06-30 10:55:14 623
原创 hdu 1159 common subsuquence
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1159#include #include#include#include#define MAXN 1000using namespace std;int dp[MAXN][MAXN];string x,y;int main(){ while(cin>>x>>y){ in
2013-06-28 20:27:09 581
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人