现在的位置: 首页 > 综合 > 正文

2011-2012 Stanford Local Contest, 8 October, 2011(完全) (2013区域赛练习)

2014年07月18日 ⁄ 综合 ⁄ 共 1170字 ⁄ 字号 评论关闭

比赛入口    MyCode

A  看懂题意以后, 3的k次方为一组找3的k+1次方与它的关系,简单推一下


B  可以dp,我YY的,答案为2^(2*n-1)*1*3*...*(2*n-1)


C  n条边有两种情况:  有一个简单环 或者 有一条重边

    1.如果有环, 我们用dfs预处理出 dfs第一个搜到的环上的点pos 到环上任意点  

       的距离(都是同一方向, 逆时针走或顺时针走) 和 环的总长all,

        然后对环上的所有点i做lca(除去环上的点,但包括点i)
     2.如果是有一条重边,直接lca, 注意要用最小边去更新

D 如果没有去一条边的选项, 那么我们可以写个记忆化搜索直接求出(期望是到着推的),

    答案就是dp[0] 现在要删去某条边, 这条边不好确定, 必然要枚举所有边, 然后用O(1)求出
    删去这条边后dp[0]的改变量aug, 关键是要从期望的计算公式去找到突破口. 

    假如我们删去边<u,v>, 那么dp[u] 的aug可以很容易算出来, 还有我们只要知道0--->u的概率p 

    那么  dp[0] 的aug == dp[u]的aug * p. 那么我们还要处理0--->任意点i的概率, 因为在DAG上, 

    所以必须拓扑来算,  拓扑可以用O(n)的dfs实现, 很快很方便.


E
简单计算几何+STL乱搞, 求出任意两直线的交点, 并把交点保存到其所在的每条直线中去,

    枚举交点, 找到交点所在     的直线i, j,   分别在直线i,j上找与其相邻的点p, q,
    假如p,q可能在同一条直线上, 那么找到一个三角形. 


F 状态压缩dp, 跟hdu4778几乎一样,搞不懂为什么dp可以看这里

   http://blog.csdn.net/auto_ac/article/details/14800835


G 差分约束判是否有解,  可以spfa+队列 (不太好)  spfa+栈(一般还行)
   但这两种做法都要使某个点入栈n次, 感觉数据一大就TLE,这里我们有更好的方

   判是否有负环,  一开始所有dis[i] = 0,从每个点出发dfs, 搜到<u,v>边权为w的边,

   当dis[v] > dis[u] + w, 更新dis[v], 当v访问过时 说明已经搜到了负环.

   这样的设计dfs第一次一定是找一个负边, 之后的路径只要路径和为负数就能继续dfs.

   这里dis数组只是记录了一个增减的趋势, 你不对dis初始化你会发现它也神奇的AC了, 

   当然为了   安全起见还是对dis都初始化为0吧.


H 假设有串数组a, b, c, a[i]+b[i] = c[i], 我们先求出每个b[i], 然后枚举长度, 

    判b[i]剩余的后缀(可能没有这个串,因为长度超出了b[i]的长度)是否等于c[i]的前缀


I  随机找一些特殊值,暴力代入看是否为零, 注意题目中有*运算, 

   极限情况会出现x^100, 所以我们找的数要尽可能的小.

抱歉!评论已关闭.