• 牛客练习赛21


    牛客练习赛21


    A 黑妹的游戏I

    • 有一个堆,堆里有三个不同的数字,每次可以选择两个不同的数字,然后计算出差值,将差值加入堆中。问,堆里最多有多少数字。
    • 可以发现,假设开始时数字为a,b,c,那么堆内的数字一定能够被表示为ax+by+cz这样的形式。此数字一定是a,b,c这三个数的gcd的倍数。又因为a,b,c三个数的gcd一定能被这三个数给表示。所以能够被表示出来的数为gcd(a,b,c)~max(a,b,c)。

    B 黑妹的游戏II

    • 两个人轮流从n*m的棋盘中取数,从左上到右下,只能往右或者往下取,都采取最优策略,求两人的分数差。
    • 很经典的dp。从dp[n][m]逐步往初始位置dp。
      dp[i][j]代表我拿了这个地方的数字后能够获得的比后手多的最大值。
      那么,可以发现,拿了这个位置之后,后手只能拿a[i,j+1]或者a[i+1,j],那么后手肯定挑另你这个状态最小的拿。所以dp[i][j]=a[i][j]-max(dp[i+1][j],dp[i][j+1])。

    C 黑妹的游戏III

    • 有一堆数字,如果两个数有公共的因子,那么他们可以同时除去这个公共因子。最后,把所有的数相乘,要求乘积最小。
    • 提供一组数据"10,10,4"。最后结果为"1"。
    • 对每个因子考虑所有的数,总不可能是两个低次幂的数约掉,而留着高次幂的,例如上面的不会将10和10中的2约掉,而是分别和4约。
    • 那么,我们就能用贪心的做法,先将最高次幂的两个数约掉一个因子,然后在取最高次幂的两个数,迭代下去。这里可以通过优先队列实现。
    • 然后,我们可以发现,这里的数是10^8。也就是说,除了10^4以内的质数外,其他的质数在每个数内至多出现一次,所以对于之外的数,直接排序约去即可。因为此时,保证不会有数内相约的情况出现。

    E 黑妹的游戏V

    • 有n枚棋子在二维平面上,现在你需要将k枚棋子移动至同一个位置,求最小移动步数。
    • 这道题是一维上的推广,一维平面上要将k个棋子移动到同一个位置需要的最小就是它们的中位数。
    • 那么二维平面上将k枚棋子移动到同意位置,可以看作是先将所有的纵坐标移动到同一位置,再将所有的横坐标移动到同一位置。所以移动到的位置就是这k个棋子横纵坐标的中位数。
    • 这里,由于这个点的横纵坐标一定是棋子的横纵坐标,所以枚举这个点坐标,找最接近的k个点即可。

    F 黑妹的游戏VI

    • 初始时给你k个整数x,黑妹需要构建一个长度为n的数组使得该数组恰好包含这k个整数,剩下的位置将由黑妹填上一些不大于100的正整数,要求数组里任意相邻的两个整数互素。

    • dp[i][j][k]代表前i个位置放了j个x,最后一个数字为k的方案数

    • 然后状态转移一下即可。
  • 相关阅读:
    联系我们
    RCMTM _百度百科
    DotNetCore跨平台~Dockerfile的解释
    DotNetCore跨平台~服务总线_事件总线的重新设计
    DotNetCore跨平台~问题~NETCoreAPP, Version=v1.0' compatible with one of the target runtimes: 'win10-x64
    DotNetCore跨平台~EFCore连接Mysql的方式
    何时可以开启透明数据加密(TDE)?
    通信系统概论---传输介质
    struts2.x中因变量命名错误不被注入到值栈的问题
    【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)
  • 原文地址:https://www.cnblogs.com/nowheretrix/p/9308097.html
Copyright © 2020-2023  润新知