50题的一点感想

不知不觉在vjudge上也打了50来道题了。1月底注册的账号,已经三个月了。实际上是从3月份听说学校要搞校队(一个一般的文科为主的学校,作为弱势专业的学院第一年开始搞,泪奔)才开始刷,之前也就打了个位数的题。。。

作为一个刚入坑的新手,有些题虽然简单,在很多人眼里都是非常水的水题,可是我要从有思路到敲成代码再到AC也要花上很大的力气。

有时候看到Accepted,很开心,回头却发现自己的思维很乱,写出来的代码也很乱,有的时候为了解决边界问题,写的可谓东拼西凑,让我都有过了是不正常的感觉了。

还有时候时间压线过的题,看看题都是好几年前的题,考虑到现在硬件更新的进度(不知道这些服务器是不是更新的比较快),这些低效的算法或者常数大的,还是存在很多欠缺的。

记得有一题是2014 北京的题,很水,我用STL东拼西凑写出来了。慢的令人咂舌。700+ms。我想想,map nlgn,排序nlgn,不应该啊,别人也是nlgn的,也用了STL,怎么慢了那么多?

突然想起来map是RB Tree,自带排序,然后我对一个有序的序列调用一次sort,然而STL的sort总体上是快排实现,快排最怕有序的,结果就直接退化到n^2了。于是删了这句sort,快了好像200+ms,虽然常数还是很大的,但是跟别人用的STL也差不多了。毕竟200+ms也是不得了的数字了。

还有一个很要命的就是,我太依赖VS2015的IDE了,尤其是装了visual assist插件,各种自动补全,语法错误提示,当时感觉真尼玛爽,然后比赛都用的别的IDE,就试着换了个devc++,写完能出来五六个编译错误,调试起来更没2015的智能舒心(尤其针对数组越界、指针非法访问),直接火葬场了。

虽然说现在的水平还是不尽人意,但是这一个月下来也是有很多收获的。

单从解题来说吧,虽然现在属于各种不会的状态,但是起码拿到题目知道首先要去分析,而不是傻乎乎的直接做;能把描述复杂的题目拆成一个个小问题;知道看数据范围,大概预估一下复杂度;数据结构上面,二叉树动手写了好几次(指针的、数组的、动态内存分配的、静态的),自己推出来用前中序遍历递归求原树;能够大概感受一下图的BFS和DFS。。。对递归的理解又深了一点。除了解题,心理素质也是提高不少了。曾经有一晚上带第二天早上都无限WA和RE的,当时都开始怀疑人生了,后来下了UVA的测试数据,才发现一个万万没想到能错的地方居然手贱写错了。要是以前的心态,我估计直接就copy别人的代码,心里想着,起码我也WA了二十来次,至少有个心理安慰吧。实际上那样自欺欺人真的没意思,这样自己找到错误,感觉还是不一样的。我也发现欣赏别人的代码,也是一种乐趣。同样的算法,具体到实现方式,可能千差万别;看懂别人的程序,确实也是对自己水平的很大的提高(尤其是没有注释的情况)有时候也在想,ACM这种算法题并不是算法的全部,很多的算法并不能用简单的题目就能在赛场上重现;更多的特定领域的算法,可能需要更高深的数学知识,群里的一哥们研究生做模式识别在那恶补高数矩阵论,之前还看过要用什么复变函数、数值分析之类的数学工具的东西。。。so,数学基础课还是不能落下,虽然更多的时候可能不会用得到,但是也不能把自己限死在只会做ACM题上啊,万一哪天就派上用场了呢。。。再说CS类其他的东西,比如操作系统,计算机网络之类,也是不能太掉以轻心的,毕竟,算法也不是计算机的全部。

Anyway,这些题也能训练扎实的编程基本功(代码+基础数据结构算法),还有思维的灵活性,从这点上来看还是值得的,起码跟成天无所事事打游戏比起来(当然我其实只会一个游戏,汗)。其实现在感觉,AC一个题远比打游戏赢了谁谁谁开心多了。至于能不能拿到奖,身外之物了,有了更好,没有拉到。。。

2017.4.23

时间: 2024-10-03 22:20:50

50题的一点感想的相关文章

关于 ACM 的一点感想

关于 ACM 的一点感想 从昨天到现在,WA好几次,终于把题目AC了,突然很有感想,记录下此刻的感受. 我始终觉得只要给我足够的时间,就没有我A不了的题目.暂时A不了的题目,就先记着,等哪天学习了相关的知识点,一定回头把它搞掉. 我发现这个ACM 很能虐人,面对无数次的WA, 要不停地审题, 甚至审视自己写过的每一行代码,各种情况进行思考,有时候还不得不推翻以前的所有思路,重新写代码,被ACM 虐了上百遍,我觉得搞ACM的,都是自虐狂.我同样也是自虐狂,有时候一道题目明明AC了,但并不满足于此,

读《少有人走过的路》的一点感想

这本书是美国心理医生斯科特*派克写的,不属于励志类书籍,但对人的启迪感觉比励志类的要好.心理疾病在我们国家属于极端被鄙视的一种病之一,骂人"神经病"也属于比较恶毒的一类.其实心理疾病在我们国家很普遍,因为我们的文化和社会环境更为容易滋生这类疾病,而且由于讳病忌医的缘故,造成了很多的人间悲剧.最为常见的一种心理疾病就是抑郁症.而得抑郁自杀的其实每年都有很多,其实这里面很多人,如果能够得到必要的治疗,是完全可以避免悲剧发生的. 作者的观点是人生就是苦难重重的,既然人生是苦难重重的,那么就应

sql语句练习50题

sql语句练习50题 Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表 练习内容: 1.查询“某1”课程比“某2”课程成绩高的所有学生的学号: SELECT a.sid FROM (SELECT sid,score FROM SC WHERE cid=1) a,(SELECT sid,score FROM SC WHERE cid=3) b

由$(this).attr('id')引出的一点感想

这几个月一直在学习JS,对HTML不够重视,有些很基础的东西还没完全掌握,于是暴露了问题. 在看DOM元素属性时突然看到了id属性,不由得想起之前我竟然是这么来获取id的 $('#btn').on('click', function() { var id = $(this).attr('id'); //... }); this指向被点击的dom元素,id的话这样取就好了 $('#btn').on('click', function() { var id = this.id; //... });

50题(ACM学习推荐题)

POJ推荐50题 1. 标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2. 标记为 A and B 的题目是比较相似的题目,建议大家两个一起做,可以对比总结,且二者算作一个题目. 3. 列表中大约有70个题目.大家选做其中的50道,且每类题目有最低数量限制. 4. 这里不少题目在 BUPT ACM FTP 上面都有代码,请大家合理利用资源. 5. 50个题目要求每个题目都要写总结,养成良好的习惯. 9. 这个列表的目的在于让

学习javascript 的一点感想

原文:学习javascript 的一点感想 //动态性是指,在一个Javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可,如下例:var obj=new object();obj.name="myname";obj.say=function(){    alert("hello");}obj.say();//Javascript是弱类型的,它的数据类型无需在声明时指定,解释器会根据上下文对变量进行实例化,比如:var

JAVA经典算法50题(转)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... [java] view plain copy public class Demo01 { public s

剑指offer 面试50题

面试50题: 题目:第一个只出现一次的字符 题:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置. 解题思路一:利用Python特性 # -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here if not s or len(s)<=0: return -1 for i in s: if s.count(i

力扣50题 Pow(x,n)

本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recursion(self,x,n): if n == 0: #递归终止条件,n==0返回1 return 1 if n < 0: #n小于0,就返回其倒数,-n和其递归结构一致 return 1 / self.myPow_recursion(x,-n) if n & 1: #判断是奇数,则结果为x*(x