这次的题目很难,做得依然不太好。
估分:50+20+100+20=190
实际:60+20+0+0=80
第一题:石子游戏
这道题的n最大有100000,所以暴搜肯定不太合适,但比赛时我绞尽脑汁没想出优化,于是,便草草地交了个暴搜方法,60分。
正确做法:
其实有多种,在这里讲一种:每遇到一个数与前面一个不相同时便记录,然后再倒着搜一遍,遇到偶数个数时不相同便不用再开循环,可直接用以前的记录,直接在ans里面减就可以了。(ans初始等于白石子的数量)。时间复杂度O(n)。
第二题:公共子串
没想到方法时觉得挺难的,比赛时做了好久却毫无收获,只好交个0上去,勉强争得20分。
正确做法:
真的好简单!用动态规划枚举两个字符串的每一位,遇到相同就加1(一定要连续,否则改为0)最后输出max(f[i,j]);时间复杂度O(n2)。
第三题:射击
经过深思熟虑后,我打了个快速排序+贪心。竟然是O(n)的!当时以为100分拿定了,结果估分时毫不犹豫地打上了100。当后来再次想起时。On,no!贪心是不玩美的!后悔已经来不及了,当时就想,唉!40分就算了吧。结果数据令我傻眼,好像是专门针对“贪心党”出的,无奈之下得了0分。
正确做法:
这题有点复杂,首先快速排序,在把这些数全部两两合并或单个,放进一个p数组里面,然后用二分查找来搜索最优解,即可输出。时间复杂度:O(n2)左右。
第四题:过河
真心不会,输出了两个样例,但是十分不幸的是没有得分。
正确做法:
还是动态规划,有点复杂。就是分别枚举普通跳跃和快速跳跃,有点坑。压线勉强通过。
最后总结:虽然这次的题目比较难,大家都没考好,但我的分数仍然不是很令人满意,要加强训练,才能用学过的知识来面对千变万化的题目,取得很好的分数。
温馨提示:最后10分钟最好不要重新交题,万一oj一卡,程序没运行完。分,不一定取得回来哦!