UESTC_Opera

 

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编辑  收藏  举报

导航