contest1
10.2:
1: 表达式求值 //POJ 1460
题意:给你一个正则表达式,然后其中有一些符号是?表示一个通配符。因为通配符只有10个,所以可以2^10枚举暴力去做。看求出来的值是否等于所给的值。
解法:递归下降的做法。按照递归下降那个论文的伪代码写就很简单了,其实递归下降写表达式比栈写简单的很多。
Eparser is var t : Tree t := Exp( 0 ) expect( end ) return t
Exp( p ) is var t : Tree t := P while next is a binary operator and prec(binary(next)) >= p const op := binary(next) consume const q := case associativity(op) of Right: prec( op ) Left: 1+prec( op ) const t1 := Exp( q ) t := mkNode( op, t, t1) return t
P is if next is a unary operator const op := unary(next) consume q := prec( op ) const t := Exp( q ) return mkNode( op, t ) else if next = "(" consume const t := Exp( 0 ) expect ")" return t else if next is a v const t := mkLeaf( next ) consume return t else error
难点:表达式的合法性判断,对于字符串表达式的处理。
2:全局最小割 Stoer-Wagner算法(最小割):poj 2914
1. 设最小割cut=INF, 任选一个点s到集合A中, 定义W(A, p)为A中的所有点到A外一点p的权总和.
2. 对刚才选定的s, 更新W(A,p)(该值递增).
3. 选出A外一点p, 且W(A,p)最大的作为新的s, 若A!=G(V), 则继续2.
4. 把最后进入A的两点记为s和t, 用W(A,t)更新cut.
5. 新建顶点u, 边权w(u, v)=w(s, v)+w(t, v), 删除顶点s和t, 以及与它们相连的边.
6. 若|V|!=1则继续1.
3:DLX(最小支配集)//hdu3529 【 Bomberman - Just Search!】 最小支配集
4:DP优化单调队列 // hdu 3401 Trade
每天只能买入,卖出,不交易三种选择
买入,卖出用单调队列优化
5:后缀数组 //ural1297
6: FFT // hdu 1402 A*B
模板题
7: 容斥原理 //sgu 476 Coach’s Trouble
8:高斯消元 // poj 1487
题目大意:
给定一棵树,然后从树根开始遍历儿子节点,每个分支等概率,每个叶子结点都有一个分数值,遍历到该结点则得到该外结点的分数值,求最后能得到的分数值的期望值。
解法:如果对应每一个结点列一个线性方程,则列出的方程我们只需对其进行解基本的线性方程组即可。题目一大难点在于如何遍历树,然后求得线性方程组。这里不会做,最后看标程的,用基本的递归就解决了。而且其使用高斯消元的时候还用了floyd的传递闭包,以得到一些相连的集合,说明给的数据不仅仅是简单的树,可能会有森林出现。
难点:如何把表达式转换成为线性方程组
9:概率题条件概率与Bayes定理 //poj 3716
10:NIM游戏及变形 //poj 2960
博弈,用SG函数。经典NIM改一点点,SG(x)=mex{SG(x-S[i])}。
11:多圆交面积 // hdu 3467
题意:给你五个圆,问你这五个圆的交面积大小,如果交面积为一个点的话,输出这个点,如果不相交,则输出2010。。。
解法:多个圆交面积,先处理内包含和重复圆,还有不相交的情况,剩下的就是相交的情况了的。
对于每个圆,让他与其他的圆求交点,然后按照逆时针为正方向去形成一段弧,然后把所有的弧求一个交集。求的弧求一段弓形面积,还有把两个端点放入一个集合中,最后把集合中的点形成的多边形的面积求出来,把所有面积的有向面积加和就是最后的结果了的。
难点:弧求交集。圆求交点。
posted on 2010-10-02 19:45 UESTC_Opera 阅读(535) 评论(3) 编辑 收藏 举报