2018年8月16日训练日记

HDU 5724 Chess(博弈)不会博弈,但是趁机学习一下。题意:有个n*20的表格,每行有若干棋子,两个人轮流移动。每次移动棋子只能将这枚棋子移动到它右边的第一个空格,同一个位置最多只能有一个棋子,不能移动棋子的人输。
分析:因为每一行只有20个位置,我们直接用二进制保存,然后计算每个状态的sg值,然后将n行的sg值异或起来就行了,xor=0先手输否则先手胜。题解参考这里。

HDU 5725 Game(思维)题意:n*m的图上有一些守卫,守卫的位置,满足彼此不同行,不同列,且相邻8格内不会有其他守卫,现等概率的选取起点和终点,所有可以不碰守卫可以到达的路径中,最短路径的期望。解题思路:首先只要起点和终点不包含守卫的两点都是可达的,而每条路径最多只会被一个守卫阻挡(根据守卫的摆放规则),那么可以先把所有的合法最短路径按曼哈顿距离(即不被阻断的最短距离)计算,然后对于每守卫计算其因阻挡而额外绕行的路线长度(绕行2的距离),最后除以总路线的数目就可以了。

要注意的几点:(1)n*m的图中任意两点的曼哈顿距离和为n*m*(n*m-1)*(n+m)/3。(2)读图的时候最好用gets()读会快一些。

绕行的情况:2018年8月16日训练日记_第1张图片

红色点到所有的黄色点都需要绕行。代码参考这里。

HDU 5726 GCD(RMQ+二分)题意:给一个数组a,大小为n,接下来有m个询问,每次询问给出l、r,定义f[l,r]=gcd(al,al+1,...,ar),问f[l,r]的值 和 有多少对(l',r')使得f[l',r']=f[l,r]。n,m<=1e5,a[i]<=1e9,1<=l<=r<=n,1<=l'<=r'。首先容易用RMQ处理出每个区间的GCD值使查询变为O(1)。然后考虑二分统计区间GCD值为t的区间个数。枚举每个以i为起点的区间,每次二分它当前的区间右端点j能到达的最远距离l。也就是说f[i,j]==f[i,l]的最大l。然后令j=l+1,继续找即可,直到为n。以为每个gcd至少/2,a[i]<=1e9所以每次查询最多30次就可以到达n。题解参考这里。

HDU 5727 (二分图最大匹配+全排列(next_permutation (a+1, a+n))题意:n个阴珠子n个阳珠子间隔串成一串项链,每一组信息u,v表示u号阳珠子放在v号阴珠子旁边会褪色。求出最少褪色阳珠子的个数。直接用STL的全排列函数枚举阴珠子的排列, 然后对于一种排列, 给每一个位置对应的不会褪色的阳珠子建边, 跑出的最大匹配就是最多的不褪色阳珠子个数。然后取个最大值用n减。题解参考这里。

HDU 5728 PowMod(欧拉函数+指数循环节)题意:定义以下公式:

给出: n,m,p ,且 n 无平方因子。要你求出:

 (k有无限个)

看不懂。。。题解参考这里。

牛客网多校第九场,荣耀爆零。干了四个小时没过样例,最后发现读错题了。。。

然后E题区间dp思想,直接枚举连续一段1的概率求期望求和即可。其他题有空再补。感觉这种难度还不如去看资料。。。不过感觉自己真是菜啊。。。而且最近明显感觉有些精力不足。。。希望尽快找回状态吧。明天整理一下今天打比赛过程中查找过的知识点。

 

你可能感兴趣的:(训练日记)