![]() Rating:978 | A:设dp[i][j]表示打第i个敌人时用第j种队伍的最大胜率,那么状态转移有两种,设p[x][y]表示第x种队伍对第y种队伍的胜率,设第i个AI是队伍k。那么我们有: dp[i][j]=p[j][k]*max(dp[i+1][j],dp[i+1][k]),第一种表示不换,第二种表示换。最后求dp[1][j]的最大值即可。 B:把广搜的过程中的队列改成优先队列,每次取出距离出发点最近的点扩展。 C:设线段连接x和y。把线段根据x排序,然后扫描一遍,类似于逆序数对的做法,添加y进树状数组,然后查询1~y-1的和累加。注意结果可能超过int范围 D:首先n==1时答案是1,k>2时无解,k==2时答案是1。k==1时枚举gcd(a,n) 的结果g,则gcd(b,n)=n/g,gcd(a,n)=g的a的个数即为phi(n/g) phi(x)为欧拉函数。结果即为∑phi(g)*phi(n/g) (n%g==0) 直接枚举n的因子即可。 E:根据nim博弈的结果,必败态是所有数的异或和为0,所有第一步操作完后要达到必败态即可获胜。枚举第一步要操作的堆,把其他堆全部异或起来的值即为这一堆需要达到的值,如果这个值小于原来的值说明可以操作。计数累加即可。 F:拓扑排序,求当出现有3个组成的环时就是yes G:二分枚举高度,求最短路。 |