2014-2015 ACM-ICPC, Asia Mudanjiang Regional Contest 牡丹江区域赛
作者:互联网
codeforces gym
远古时期的区域赛,前8道题都比较无聊,熟练换根DP可直接虚空夺冠.
A. 签到.
I. 签到.
D. 试图用组合数和容斥原理计算,精度直接爆炸.合理的做法是用\(DP[i][j][k]\)表示第\(i\)天恰有\(j\)行和\(k\)列被支配的概率.转移时需要先算加法再算除法,否则会有精度问题.复杂度\(O(N^2M^2)\).
K. 合法的情况为:1.纯数字;2.将数字记为\(1\),星号记为\(-1\),任意前缀和需大于等于\(1\),且末尾为星号.只考虑第\(2\)种情况,首先在前面补足数字使得和大于等于\(1\),然后贪心交换最前面星号和最后面数字直到合法.复杂度\(O(|s|^2)\).
B. 枚举去掉每条边后,两棵子树直径一半(上取整)的较大值.换根DP,在每个点记录子树中最长路和以该点为起点的最长路.复杂度\(O(N)\).
H. 模拟.考虑类EON
定义如下:
struct EON{
bool isString;
string value;
map<string, EON*> pairs;
EON(const string& s, int L, int R, const vector<int>& matches);//matches表示括号和引号匹配情况;递归构造函数
EON(const string& s);
void print();//递归输出函数
void get(const string& s);
};
实际上这题代码比较简单.
F. 考虑\(f[u][i]\)表示考虑\(u\)的子树中\(u\)取值为\(i\)的方案数.需要使用莫比乌斯反演进行转移.
转移方程为:\(g[u][i]=\displaystyle\sum_{i|j}f[u][j],h[u][i]=\sum_{j|i}\mu(j)g[u][j],f[u][i]=\prod_{v\text{ is son of }u}h[v][i]\).
同样需要换根DP,复杂度为\(O(nR_\max\log R_\max)\).
E. 一种构造方案如下:
假设存在\(N-2\)的方案,并且起点为左上角,终点为左下角.
无论\(N\)为偶数还是奇数,都存在一条路径,经过所有满足\(x\le2\lor y\ge N-1\)的\((x,y)\),并且起点为\((1,1)\),终点为\((N,N-1)\).(奇偶的路径在右上角有区别).
然后逆时针旋转\((N-2)\)的方案接在上述路径后,此时可以满足起点为左上角,终点为左下角.
GJC. 不会/没看.
标签:Mudanjiang,const,string,Contest,复杂度,Regional,EON,换根,DP 来源: https://www.cnblogs.com/Heltion/p/13676607.html