ACM训练日记7.7

耗尽温柔 提交于 2020-08-09 13:10:49

一、训练赛情况

  1. A. Heating(AC)
    题意:
    给你a和b,让你把b拆成a个数,这a个数之和要等于b,且这a个数的每个平方加起来的和必须是最小。
    思路:
    贪心思想,通过对样例的分析,又自己造了几组数据测试,发现平均放就可以了,然后余出来的数分成若干个1,加在之前放的数上。一般这种贪心的题目我都是从数据分析入手。



  2. B. Obtain Two Zeroes(AC)
    题意:
    t组样例,给出a,b,有两种操作
    ①:a = a - x, b = b - 2 * x
    ②:a = a - 2 * x, b = b - x
    注意:x可以为任意值,每一次操作x的值可以不唯一
    问最终能否将a和b都变为0
    思路:
    就是一个数学题,需要列方程组。
    设每次x都为1,设a=a-1&b=b-2有m次,a=a-2&b=b-1有n次,问题即转化为关于m和n的方程组a=m+2n,b=2m+n。








  3. C. Infinite Fence
    题意:
    现有10^100块木板需要涂漆,第x块如果是x是a的倍数,则涂一种颜色,是b的倍数,则涂另一种颜色。如果既是a又是b的倍数,那么两种颜色都可以涂;如果连续有k块板的颜色是一样的,则输出REBEL,否则输出OBEY。问是否能避免被处死。
    思路:
    用到了数论的知识
    我们先假设r是小的,b是大的。那么最长连续区间肯定是r的倍数染的色。b的染色情况为b,2b,3b…kb。r可以出现的位置肯定在两个b的倍数之间,那么r可以出现的区间长度肯定是b−1。我们考虑最坏的情况那r在一个区间出现大的位置肯定要尽可能的早设这个位置为t。那么满足式子k1*
    b+t=k2*r。
    由 exgcd可得 ax+by=c 当且仅当 gcd(a,b)∣c有解。c 最小为gcd(a,b)。即t最小为 gcd(r,b) 。则最多连续的木板数为((b−1)−gcd(r,b))/r+1。把这个数和k比较就能得到答案。






  4. D. A Game with Traps
    题意:
    m个士兵敏捷值为ai,有k个陷阱,每个陷阱有l,r,d三个属性,l代表陷阱的位置,r是可以使陷阱失效的位置,士兵敏捷值不小于d的才可以经过l,现在你和m个士兵位于坐标轴0点,boss位于n+1点,每次单独移动和带士兵移动一格(左右)花费的时间为1,经过即可以拆除陷阱不花费时间。求在时间t内最多能带多少个士兵到boss点。
    思路:
    二分,将所有的陷阱区间对左端点进行排序,然后二分计算如何将花费时间在范围内最大化。核心选择:b[i].d<=mid||b[i].r<=mx这样一来对于低于他的直接跳过(不改变mx),如果有两个陷阱 [ 1 10 5 ] [ 5 7 100 ],是否存在直接拆除第一个陷阱而直接忽略第二个陷阱而影响结果呢?最优解三种情况1、全体小于5这时,需要跨过两个,由于重复导致只需拆除第一个。2、大于5,直接忽略第一个陷阱,拆除第二个陷阱。3、大于100,都跨过过没有任何影响。



  5. E. Tournament
    题意:
    有n个人进行比赛,每次比赛两个人中胜者晋级,继续进行下一轮比赛,直到最后决定冠军。n个人每个人有排名,比赛排名高的一定获胜,但可以收买排名高的人,让其输掉比赛,你想让其中一人获胜你可以安排比赛,求最少的花费使你需要的那个人成为冠军。
    思路:
    还是贪心问题。 设让s号成为冠军,则需要考虑收买部分比 s 强的人。所有人中最强的人一定需要被收买,因为他与其他任何人比都会晋级。所以不如把他安排在决赛,让他打倒更多比s强的人(那样s就可以安排更弱的对手了),总共能打倒2^k-1 -1个人,暂且认为他淘汰了最大的2^k-1-1个人。半决赛,与s对战的人,则一定是前2 ^ k-1中最大的人(暂且不考虑收买的问题),因为其他人是无法晋级到半决赛的,理由同决赛,其实能做到还有被最强的打倒的那2^k-1-1个人也是可以做到的。所以综合考虑这些人中,收买费用最小的人,安排他作为半决赛对手即可。同理可以求出其他轮次需要收买的人。
    F. Colored Tree
    题意:
    给你一棵n个节点的树,每个节点都有一个颜色。这棵树的权值定义为,任意两个相同颜色的点之间的路径长度之和。但是,这棵树的每个点的颜色是不确定的,你只知道节点iii的颜色属于某一个区间[li,ri],于是这棵树总共就||1≤i≤n(ri−li+1)种可能。你需要求这么多种可能情况下的树的权值和。






二、赛后总结

今天的比赛难度要比昨天高一些,几乎每个题都需要一定的算法知识,只出了两个题,不过今天比较好的一点就是没有出现小错误,没有罚时。第一个题还好,比较熟悉的贪心,到了第二道题,就是个数学题,我这个数学渣渣做了好久才出来。其实第三道题看完题解后感觉也是能出的,当时比赛离正确答案就差一点点了,还是自己思维不行。后续补题也是出现了麻烦…F题根本看不懂,一脸懵逼。不是目前我这个水平能解决的…
PS:发现了一个小规律,题目中规定的时间限制和内存限制比较小的题目往往就是前面的题目,也就比较简单…

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!