“华为杯”中国矿业大学程序设计学科竞赛重现赛题解
A题 毕业生的序列游戏
需要一点点数论功底。(数论方向必写)
1、将m1,和每个si拆成素数的乘积。比如:24=2*2*2*3、30=2*3*5、12=2*2*3
2、然后可看出12*12%24=(2*2*3)*(2*2*3)%(2*2*2*3)=0(原理任何两个不同的素数gcd==1)
B题 A题
水题,几个if就好了。虽然我是建一个图跑一遍dfs看看两点是否连通。
C题 均分糖果
需要一点思维。提前每个数减去平均值,然后看到前r个数和为0就将Ans--并且前r个数删掉。(Ans开始等于总个数)
D题 B题
将图正反跑一圈。(图论方向必写)
E题 很简单的题。。。。。。
水题,前缀和
F题 最大公约数和最小公倍数问题
枚举y0所有因子中满足是x0倍数的,然后暴力枚举。根据a*b=lcm(a,b)*gcd(a,b)来判断是否符合题意。放心,时间不会超。
G题 毕业生的纪念礼物
贪心,先计数,因为太大了,要用map。得到每个数的个数后大到小排序。将排序后前三个数取出。然后将其他拆成一个个加在前三个数上。尽量满足三个数中最小的数最大,答案就是那个最小的数。
H题 毕业生的序列游戏
概率dp。还没写出来
I题 你的粪坑v1
水题
J题 你的粪坑v2
简单dp,把每个状态考虑清楚就好了(dp方向必写)
K题 你的Alice
感觉会超时的,可以把数据范围减小。然后,模拟模拟,ifif就好了。
常用技巧:
当你发现出现很多次循环后,并且循环并不会影响答案。你可以直接跳到最后几次循环。