zoukankan      html  css  js  c++  java
  • 牛客练习赛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的方案数

    • 然后状态转移一下即可。
  • 相关阅读:
    今天被编码搞惨了,页面和脚本的编码一致性
    在IE下FLASH背景透明而在FF下不透明的解决方法
    仿FLASH 的大图切换效果 图片切换 jQuery 圣诞节
    仿ABCNEWS 的新闻切换效果
    preventDefault() 方法 取消掉与事件关联的默认动作
    jQuery 投票调查组件
    js常用脚本 判断浏览器
    Django 之 drf 第三篇 视图类 路由的使用
    Django框架之drf 之一 [restful规范 APIview源码分析 Request类分析 序列化组件 ]
    django框架之十一 Auth模块
  • 原文地址:https://www.cnblogs.com/nowheretrix/p/9308097.html
Copyright © 2011-2022 走看看