考试总结 模拟83

T1以为是大神题就没敢想??

T2T3自以为想出了暴力很NB。然而只是可怜的大众分。你轻松想到的东西,别人也能轻松想到!!

T1【贪心】【二进制】

将每一个二进制位分开考虑,从高位向低位去考虑,

先手一定会尽量让自己这一位是1,让对手是0,但是由于最终每个点都会被选,

那么对于所有点在某一位上的值异或后==0的情况,显然先手无法选出自己是1,对手是0的情况

而只要有一位的异或值为1,那么先手就会赢

T2【组合数学】

定义f[i]表示考虑到第i位已经有的(数量,g[i] 是从后往前考虑到第i位有的)数量

那么每一个(的贡献== i前( 数量  *  i后 )数量

显然强制i位的(必选后再算贡献不会算重或漏

那么考虑优化

从实际意义考虑优化$$sum_{j=1}^{j<=min(f[i],g[j])} C(f[i]-1,j-1)*C(g[i],j)$$

 $C(f[i]-1,j-1)==C(f[i]-1,f[i]-j)$

那么原式子就变成了在f[i]-1里选f[i]-j个+在g[i]个里面选j个

也就是在f[i]-1+g[i]里面选f[i]个

T3【DP】【最短路】【分块】

其实感觉就是个DP

定义f[x][y][k]表示从x出发到y,恰好经过k条边的最短距离

转移复杂度O(n^3*k)

枚举k的复杂度很高,用分块思想

定义g[x][y][k]表示从x到y,经过k*100的最短距离

转移$$g[s][x][k]=g[s][y][k-1]+f[y][x][100]$$

最后把f[x][y][k]从前往后扫一遍取最小值,变成至少

每次询问枚举中间点 $$min{g[s][i][k/100]+f[i][t][len\%100}$$

原文地址:https://www.cnblogs.com/casun547/p/11730097.html