2019ICPC女生专场比赛心得体会
比赛环境
时间:2019/06/01
地点:南京晓庄学院,信息工程学院,鹤琴楼一楼机房。
参赛队伍:共155支。
测试环境:Win7:Dev-C、CodeBlocks、Eclipse、IDEA
评测环境:Ubuntu16.01:gcc-4.8
赛题链接
对参赛环境的感受
- 首先,诧异于实在机房比赛,感觉真的很挤,气流不畅通,很闷。
- 其次,热身赛发现Dev-C不能使用常用的函数(不知什么原因就是报在头文件里面有中文符号错误,这我还是第一次遇到),只能用不太熟悉的CodeBlocks了。
- 最后,就是午餐提供的是面包、饼干和香肠,大概是在机房考的原因吧。
比赛解题感受
Problem A. Ticket
北京地铁票每月的打折规则为:本次乘车前总消费不足 100 元本次不打折满 100 元不足 150 元本次打8 折,满 150 元不足 400 元本次打 5 折,已满 400 元后本次不打折,已知 wls 每次出行的原票价,请问实际的花费是多少?
签到题,不多解释
Problem B. Gcd
- 题目:wls 有一个整数 n,他想将 1 - n 这 n 个数字分成两组,每一组至少有一个数,并且使得两组数字的和的最大公约数最大,请输出最大的最大公约数。
- 做题波折:虽说这道题很简单,然而我们在这里卡题了…
开始没有找到规律,始终停留在和为奇数和为偶数的分类讨论上。
后来,才发现和为奇数的时候,就是找到和%素数==0时,和/素数的值。于是WA…。这道题数据的范围是2 ~ 1000000000,太大了,开数组用埃氏筛选法标记素数的位置,明显无法到10^9大的素组,然而长时间我们没有发现是数组的问题,以为素数很小就可以除尽了。
然后,还尝试过,1 ~ n的和折半后向左遍历找到最大的因数,然而…TLE。
最后在绝望之际,我们发现思路回到了因数上面,没错就是因数,我尝试了一下2~根号下n的和遍历,直接求和的最大因子,感觉跟素数的想法是等效的,以为不会过,结果过了…
深感在这道题上浪费的时间太多。
Problem C. Function
wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci(1 ≤ i ≤ n)。现在他想在∑ni=1 xi = m 且 x 为正整数的条件下求∑ni=1 Fi(xi) 的最小值。请求出这个最小值。
题目是数学题,直接跳过了,需要补题。
Problem D. Tree
Problem E. Checkout
有关树的题都跳过了,学习不扎实…
Problem F. String
wls 有一个长度为 n 的字符串,每次他可以将一个长度不大于 l 的子串修改成同一种字母,问至少修改多少次可以使字符串最多含有 k 段。连续的只含同一种字母的子串被称为一段。比如说, aaabbccaaa 一共含有 4 段。
感觉挺简单的,是道DP题,就是没思路…
得补题了…
Problem G. Circle
在半径为 1 的圆上有 n 个点,它们也是圆的 n 等分点,将每个相邻的 n 等分点相连,组成了一个正 n边形,现在你可以在圆上再增加一个点,使得新的 n + 1 边形的面积最大,请输出最大面积。
签到题,正n边形的面积:n/2 * r^2 * sin(2pi/n);
添加的点肯定在相邻两点之间,所以结合起来的公式就是:(把多边形分成三角形之后,少算一个三角形,剩下的凑成一个四边形,四边形的对角线是相互垂直的,相乘/2即为四边形的面积)
(n-1)/2 * r^2 * sin(2pi/n) + r^2 * sin(pi/n)
然而r = 1,更简单了…
Problem H. Clock
wls 有一个钟表,当前钟表指向了某一个时间。又有一些很重要的时刻,wls 想要在钟表上复现这些时间(并不需要依次复现)。我们可以顺时针转动秒针,也可以逆时针转动秒针,分针和时针都会随着秒针按规则转动,wls 想知道秒针至少转动多少角度可以使每个时刻至少都会被访问一次。注意,时钟上的一种时针分针秒针的组合,可以代表两个不同的时间。
最后30分钟了,做题有点慌忙,可惜了,原本能解出来的:
就是顺逆遍历两次,把4种情况可能的值都计算出来,找到最小值就好。
4种情况:仅顺时针耗时,仅逆时针耗时,先顺时针后逆时针耗时,先逆时针后顺时针耗时。
处理时间的技巧,直接把钟放大,整个圆盘的刻度为1236006这样就没有时针和分针的考虑了。
Problem I. Union
这是全场最难的题了,做出来的队伍很少。
Problem J. Tangram
一块七巧板有 7 块,现在 wls 想再在七巧板上加 n 条直线将七巧板切分并且使得切出来的块最多,请问最多能有多少块?
这题是签到题,我还卡了一会儿…
思路是对的,基本的7块+(6 + n + 6 - 1)/2
然而题目的输入是多组数据…
用while(cin>>n)读入,这个罚时的锅我背…
Problem K. Tetris
wls 有一个 n ∗ m 的网格,他现在想用俄罗斯方块中的"凸"型密铺它。一个"凸"型占四个格子,你可以随意把它调成上下左右四个方向中的一个。密铺的定义是网格中任意一个格子被且只被一个"凸"型铺到,并且这些"凸"型不能铺出网格的边界。随意输出一组解即可。
这题,出题方是想大家用搜索算法的…
其实只有边框为四的倍数才有解,而且最小的组成方法就是样例…
所以,单纯的复制输出就可以实现…
最后的心得体会
- 首先要读题仔细,注意细节,这次的罚时很高,主要就是读题不仔细,思路都是差不多的。
- 其次,就是好需要多刷题,像树的题直接跳过,这样是不对的…
- 最后,就是加油努力明年再战。