参加浙江中医药大学第十一届程序设计竞赛(ACM赛制)的总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhouyuheng2003/article/details/78766957

前言

2017.12.10,浙江中医药大学主办了一场acm赛制的比赛(浙江中医药大学第十一届程序设计竞赛),而我和我们学校(杭州二中白马湖学校)的另外两名同学组成一队也去参加了,这是我打的第一场acm比赛,和传统的oi比赛不同,acm赛制的形式不一样,题目类型也不一样。

规则介绍

这场比赛的规则和传统acm大致相同,只是在时间的方面不一样。这场比赛一共四个小时(传统五个小时),有11题编号分别为a~k。比赛以队伍的形式参加,人数为1~3人,每队只能使用一台电脑。每a掉1题就可以获得1个气球,不同的题目有不同颜色的气球,另外的,每一题的一血队伍能获得一个金色带着题号的气球。

比赛进行时

一开始,我们商定好了每个人开哪几个编号的题目,我要开的是C题,一看到题目,我就有了思路,于是先开始打了起来

C题(寻找zcmu)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=2
题意简介:多组数据,每组数据一个长度不超过100000的字符串,让你在其中找到一种方案,删去最少的字符时得串中出现一段连续的字符“zcmu”。
解决方法:显然这是一道dp题,dp[i][j]表示终点为i,包含目标串的前j个字母的最靠后的起点位置,滚动一维数组,就很好写啦

当然,最后我A掉了C题
在我打C题的过程中,另外两名队员先大致看了一遍其它的题,找到了2道水题,一道是E题,一道是G题

E题(Pizza)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=4
题意简介:很玄乎的题目,但是只要分析以后就可以发现答案其实就是输出输入的k,多组数据
解决方法:对于每组数据输入一个整数,输出这个数

G题也很水

G题(特产)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=6
题意简介:一个人出游时空箱子重量为a,回来时重量为b,问他在旅游过程中买了多重的东西,输入2个实数,输出一个整数
解决方法:用double读入,输出时用.0lf就好了,这是b-a problem

随后我们由一位同学来打树链剖分的一道模板题A题

A题(不存在的树)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=0
题意简介:树上的路径上求max、求和并支持单点修改
解决方法:树链剖分

那位同学很给力,这一题也A了
在那位同学打A题代码的时候,我和另外一个同学推出了B题

B题(一生之敌)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=1
题意简介:多组数据,每组输入一个非负整数 n(n<=11019) ,求一个最小的大于n的b满足 2a(a+1)2=b2(a,bZ)
解决方法:即要满足 2a(a+1)2 是完全平方数,那么显然 a 一定满足 a=2x2(xZ) 可以发现x和a的单调性相同,所以说只要二分这个x就好了,另外要注意的是要用unsigned long long,否则会爆,还有要特判0的情况,否则二分容易陷入死循环

接下来呢,我们又有一个同学一眼秒了J题

J题(序列)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=9
题意简介:给定两个长度为n(n<=100000)的序列a,b,让你求有序数对 <i,j> 的数量满足ai=bj且gcd(i,j)=1
解决方法:经典做法,用容斥,显然只满足第一个条件的很好统计,然后再减去gcd(i,j)大于1的满足条件有序数对数量就好了

在后面,我们又切了F题

F题(开心的cc)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=5
题意简介:多组数据,给定一个长度为n(n<=100000)的1、-1的串,串可以复制以后加到后面,求1~n中能作为起点满足从起点开始的长度为n的串的前缀和为正
解决方法:考虑用一个单调队列来维护前缀和的从小到大的值,若单调队列的最小值大于0则计入答案即可

比赛过去三个小时了,有很多队伍A掉了D题,然而我们队却还没有,怎么办呢,我们想了很久,一直没有想出来,最后换了一个思路,最终做了出来

D题(cc的神奇背包)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=3
题意简介:多组数据,你有一个背包,初始容量为v,你有n个物品(n<=1000),第i个物品需要占用ai的空间,并且如果成功放入,背包会多出bi的空间,问能否放入所有的的物品
解决方法:首先,如果某个物品的ai<=bi并且放的进去,那么就贪心的放进去,让背包扩容,然后呢剩下的物品用倒推的方法,先计算出如果所有物品都成功放入最后背包还剩的体积vlas,那么倒推最后一个放的物品x,vlas一定大于等于bx,那么可以倒推vlas1位vlas-bx+ax,若发现不能倒推了且还有物品没被用掉,那么就说明不行,否则就可以

最后我们队还剩三题没有A,分别是H、I、K,我H题可能会做了,我有一个同学会做K题,I题是一道字符串的比较繁的题
我就在说一下H题吧,至少我大致是会的

H题(剪纸)

题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=7
题意简介:输入n(4<=n<10),代表一个n*n的正方形,你要用一条折线把这个正方形分成面积相同的两半,问方案数(旋转相同算同一种方案)
解决方法:如果n是奇数,那么面积也是奇数,方案数为0,那么根据数据范围也就是只要分别知道n=4、6、8时的方案数就好了,那么怎么算呢,可以爆搜,可是n=8时怎么办呢, 264 显然受不了啊,那么可以缩小问题规模
先说我的复杂度,是 O2(n2)n/2(n2)n/2 的,当n=8时复杂度为402653184,大概只要跑4s
首先呢先假设两半的颜色一半黑一半白,那么靠两边各的一列分别都是一种颜色的,显然不证。那么考虑只要搜中间的一大块的一半就好了,另一半是中心对称的,那么就指数枚举,在加判断,只要是所有黑色都和左边联通,所有白色都和右边联通,这个很好判断,还有要注意的是尽管只枚举了一半,但是还是要考虑上下的情况,这个也很好处理,连着前面的用并查集就好

剩下的题:
I题(Memory leak)题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=8
K题(追求者)题目网址:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?cid=1214&pid=8
有兴趣的读者可以去做一做哦

总结

感觉这一次三个人配合的很好,然后呢D题出的很慢,导致最后题目来不及码代码很可惜
这套题目给我的感觉是,如果能把题意转化一下很多题目就不是那么难了
然后呢,打acm比赛团结协作很重要分配好时间和人力,这样才能多拿分
总榜网址:http://acm.zcmu.edu.cn/JudgeOnline/contestrank.php?cid=1214
我们队拿了rank6,可能罚时偏多了

猜你喜欢

转载自blog.csdn.net/zhouyuheng2003/article/details/78766957
今日推荐