2016 Multi-university training contest

day 1

A

给G<V,e\(\in\)E>,w(e)1M(diff),|V|100K,|E|1M,求

  • MST
  • MST上任意两点间距离的期望

显然MST唯一

E(dis(u,v))可以通过计算每条边的贡献加出来

B

n个并行游戏,每个游戏都在一个1x20的棋盘上有20个不可区分的棋子,两人轮流,每人可以选择一个棋子往右跳到棋盘上第一个空点,不能走就输了.求胜负.

状压SG,O(n×20+2^20).

每个点的扩展点个数$\le\(20所以sg值\)\le$20,那么可以用bit trick来完成mex.具体的就是

typedef unsigned int MO;
MO mex(vector<MO>&z){
    MO x=0;
    for(auto y:z)
        x|=y;
    return (~x)&(x+1);
}

C

n×m棋盘上放一些障碍,且障碍格8联通区域与同行/同列都没有障碍,求棋盘无障碍点距离期望.

首先x轴y轴分开扫描线,然后考虑一下遇到障碍点绕弯的情况.

似乎细节很多且卡常.

D

给序列|a|100K, 100K询问给l,r求

  • gcd(a[l::r])
  • gcd(a[u::v])==x(u\(\le\)v)组数

第一问很简单,线段树/ST表.

第二问很简单,你可以预处理:选定u,

  • Step 1: v=u
  • Step 2A: GG=gcd(a[u::v])
  • Step 2B: 找最大的v'使gcd(a[u::v'])=GG,加入答案
  • Step 2C: v=v'+1
  • Step 2D: if v>n break; else goto 2A.

对每个u最多循环log(u)次(因为每次的GG都是上次的约数).

E

有N($\le$9)个黑节点N个白节点,要求连接成一个环,其中一些白节点如果和一些黑节点相邻那么它会造成1的损失,求损失最少的方案(任意一组).

枚举黑节点的顺序,然后跑二分图最大权匹配.

F

F(m,n)=sum(i:1->m,\(\phi\)(i*n))其中\(\phi\)就是那个欧拉函数.

G(k)=k(k(k(...k))) mod 10^9+7

dzy loves math 4和《上帝与集合的正确用法》的无机结合.

G

有n×m(n,m$\le$10)的网格,在网格中间加入一些斜杠使网格不能被扭曲.斜杠不能相交.

首先,一个格子中有两种摆斜杠的方法,它们的作用是等价的.

考虑一些显然正确的事情:这个网格不管怎么扭曲中间的方格也只能是菱形,是平行四边形.那么我们考虑一条横杠的作用,是让加入横杠方格一列上所有的横边和一行上的所有竖边垂直.

那么我们要让这个网格形态固定,一定是让所有的横竖边都相互垂直.那么我们可以自然的将行列建点,构造二分图,每加一条横杠就是让对应行和列连一条边.最终我们要使这个二分图联通.

设f[i][j][k]为左边i个点右边j个点总共k条边的方案数,可以自然的列DP方程(容斥一下).最后乘系数,求和.这个DP还是非常经典的.

H

将n($\le$100K)个数的序列染色,每个数只被染一次,染一段长度为k的区间有a_k种方案,求总方案数(模313).

设A[i]为染了前i个的方案数,A[0]=1,则A[j]=sum(i:0->j,a[j-i]k_i).这个式子是一个典型的分治FFT式子.

I

用1×2多米诺骨牌铺满n×m(n,m$\le$16)网格的方案数.

轮廓线DP,打一分钟的表.

(存在伪多项式算法:http://www.math.cmu.edu/~bwsulliv/domino-tilings.pdf)

posted @ 2016-07-21 19:31  zball  阅读(190)  评论(0编辑  收藏  举报