考研日记
##2018-07-16 周一##
今天下午在图书馆,申请了博客园,之前用CSDN,但是广告太多,被恶心到了。暂时还没有自己搭一个blog的打算,这个先用着吧,还蛮喜欢博客园这种简单的风格,最主要的是——它没有明显碍眼的广告。
近来拖延的有些严重,一直没有总结,今天早上写完代码,突然有些茫然。想用这半天时间停下来好好思考,于是跑去看了看论坛前辈的记录,突然想到我也应该对这段历程记录些什么,那么,就从今天开始吧。以往的经验告诉我,在学习这件事上,最不需要仪式感——不需要等到下周一早上八点钟,也不需要等到离deadline恰有xx天,总之想到就该开始做了,做着做着就成习惯了,就是这么简单。
年初辞职,回头想想,辞得有点早了。不过也没什么好后悔的,除了少挣了点钱,在公司的后段时间自己过得并不是很理想,能力上得不到进步而遇到的问题却无人可交流解惑。总之,任一结果都不是单因素造成的,做了这个决定,我也必须要为自己的决定承担责任。再说了,时间一晃现在都已7月中旬,真是一眨眼的功夫啊。
四月多开始正式复习,截至目前——
数学方面:四月、五月、六月把高数部分过了两遍(基础+强化),主要把汤家凤的高数讲义和题典1800的高数部分做掉(后面还有三节留着)。然后七月初开始线代,头两天快速的把基础课视频过了一遍,对基本概念有了大致的认识,然后开始做题,到昨天为止,已经把汤的线代讲义都做完了(用了8天时间,期间有6天是全天写代码的),线代的进度比自己预想的要快很多,但总体感觉上汤的题目貌似比较简单(所以,快是因为简单吗?)。
英语方面:五月份练了15天左右的手写印刷体,感觉书写有了明显的变化。同时,学习了武峰的《十二天突破英汉翻译》,虽然书名属于"xx天搞定派",给人一种不靠谱的感觉,但这确是本好书。阅读中常有醍醐灌顶之感,解决了我在英语学习方面的很多困惑,让我对英语和汉语的语言差异有了些许了解。在四月份的时候还坚持阅读了近30篇The Economist,这个过程让我获得了许多满足感和愉悦感,是种美妙的体验。这个阶段不算真正的复习,初心多半是因为对英语的爱好,内心也少有功力之想,怡然而自得。五月底至六月下旬,做了05~07三年真题的阅读部分和05~09五年真题的翻译部分,七月伊始至今,英语阅读就没再做过了,不过基本保证每天都有背单词,截至到昨天,大纲词汇已经过完两遍了(结合"欧路词典"),觉得效果挺好。上周买了何凯文的同源外刊,也能保证一天一篇的阅读量。
专业课方面:五月中旬到六月上旬做完了王道的数据结构,前后花了约20天,感觉比以前做明显容易多了,但是算法设计题仍然需要多练,毕竟考场上终究拼的是熟练度,没有大把的时间去思考。然后就是刷PAT了,不过刷算法着实是一件耗时间耗精力的事情啊,尤其在考研这个紧张的阶段。而且感觉题目难度越来越难了,但是无论如何要咬牙坚持下去,9月8号去杭州,一定要拿下它!同时要平衡好数学和PAT的时间,哎,难啊,坚持住!
今天第一次记录,算是简单回顾了一下,离考研还有159天,可以说是非常紧张了。我不太相信那种复习5个月甚至3个月就能上清北浙交复的所谓奇迹——尤其在计算机/软件这种竞争及其激烈的学科中,而即使有奇迹,那也是极少概率的,我深知自己不属于这个行列。不去怀疑自己的能力,不去羡慕他人的成绩,不要浮躁和贪婪,也不要想着overnight success,默默努力吧。
##2018-07-22 周日##
周日,做个小结。
本周定的任务超额完成,任务量似乎定的小了点。周一下午和晚上几乎没刷题,今天早上也起得很晚,说起来还是浪费了好些时间。早上做数学,下午和晚上写代码,闲暇抽空背单词和阅读,这个安排似乎是效率较高的,在PAT考试结束前就按着这个节奏走吧。此外,本周锻炼了两次,每次锻炼完吃半个冰西瓜,真是爽哉。不过睡觉还是太晚了些,尽量12点前睡觉吧,很多时候效率低还不是前一天没睡好??!!
睡了,晚安!我知道你会有起伏和波动,但明天醒来又是新的一天!上帝终究不会亏待努力的人!
##2018-07-29 周日##
本周发生了点意外,浪费了两天半的时间。好在任务还是基本完成了。比较严重的问题是早睡早起以及空闲时间玩手机的问题,其他的我觉得任务量还可以再加大。下周一定要把要把作息调整好,这是下周的重点任务!
##2018-08-01##
今天刷题时,把double型定义成了int型,debug了2个多小时,记录一下这愚蠢的行为!反思,严谨!
##2018-08-23##
8月份到19号为止做完了两轮概率论,感觉还比较满意。7月完成线代的两轮复习,8月搞概率,高数已经快两个月没有做了,比较慌。但是9月8号的PAT又迫在眉睫,到考完PAT之前还是all in coding吧,数学放在晚上做3个小时。写代码坚决不能放在晚上,一写就熬夜,得不偿失!
目前已经把甲级题库基本刷完了,后面几套限时模拟了一下,只能得个75分左右。很多细节的点因为不够熟练而导致失分,或者耗时较长,这些是近段时间需要攻克的问题。此外,准备把题解放到博客上来,就当这段时间的复习整理了。加油。PAT,90+!!!!!!
##2018-08-25##
这周真的是All in PAT了,但是从23号到今天整理的情况来看,感觉效率不高啊!今天晚上有点崩溃,突然感觉自己像是迷失的羔羊,迷茫,不知道自己的努力能否得到回报,这一次真的有点害怕失败,毕竟我花了这么多的时间和心血。刷PAT真的非常耗时间,这个和做数学做英语不能相提并论,这一周几乎没有做过数学和英语了,除了刷题本身需要大量的时间,我想我自己也有点不按计划进行,导致数学和英语的进度没有及时跟上,说到底还是因为自己浪费了太多的时间,尤其在晚上回到房间后的这个时段,时间越来越紧迫,要合理把控自己,不能功亏一篑啊!!!想想查成绩的那一刻,如果现在浪费时间,不能做到100%的努力,到时候失败了,那种感觉,那才是真正的失望啊!
##2018-09-04##
8号就要去杭州考PAT,这几天开始限时模拟了一下,感觉状态还不错,希望考试的时候也能这么顺利。继续保持!加油。把这几天的练习情况记录与此,算是给自己的一个激励!
8.31 下午第1套:1144~1147,得分:100分,耗时:1小时8分钟(做的太顺了吧)
8.31 下午第2套:1140~1143,得分:100分,耗时:2小时12分钟(1142卡住了,找了半天是个低级bug,罪过!)
9.01 上午第3套:1136~1139,得分:100分,耗时:1小时40分钟
9.01 下午第4套:1132~1135,得分:100分,耗时:1小时41分钟(链表有个坑之前没注意到,找了几分钟)
9.02 上午第5套:1128~1131,得分:100分,耗时:2小时40分钟(1130居然卡了很久,后来突然又想通了;1131耗时80分钟才AC,有点慌啊)
9.02 下午第6套:1124~1127,得分:100分,耗时:1小时8分钟(好简单。。)
9.03 上午第7套:1120~1123,得分:100分,耗时:1小时51分钟(中间两题浪费了一些不该浪费的时间,分别是输出格式"%05d"问题和多次查询前的初始化问题)
9.03 下午第8套:1116~1119,得分:100分,耗时:1小时55分钟(简单的题看题不仔细,浪费了一些时间;最后一题pre+post构建二叉树没有特别熟悉)
9.04 下午第9套:1112~1115,得分:100分,耗时:1小时58分钟(第1题字符串处理有点耗时了,第4题这么简单的又tm看题不仔细了。。。)
9.04 下午第10套:1108~1111,得分:100分,耗时:2小时13分钟(最后一题两次Dijkstra做了1个小时,这种题只是堆代码量而已,不要慌啊!)
目前来说都能拿到满分!继续保持,还有最后3天,All in !
##2018-09-05##
9.05 上午第11套:1104~1107,得分:100分,耗时:1小时39分钟
9.05 下午第12套:1100~1103,得分:100分,耗时:2小时42分钟(ps.做这一套的时候真有种考试的感觉,就是做起来不是那么顺手的,前面两题思路都是立马就有的,本质上是很简单的题,但是因为自己在编写代码之前没有先设计好,理清思路,所以提交后丢三落四,改来改去非常影响心情和状态,考完后和第一次做的相比较,代码居然写的更烂了。第3题很水。第4题是非常好的一道题,一开始自己居然看错题目,与之前那个因式分解的搞混了,浪费了一些时间,不过好在静下心来,花了一个小时AC了,真正考试的时候也要保持这样的心态,即使第一题花了40分钟也不要慌!稳扎稳打!越急越想不出来。。)
今天的教训就是——写代码前一定要写在纸上写好思路和关键代码,该分类的分类,边界情况好好考虑,切记好高骛远!
##2018-09-06##
9.06 上午第13套:1096~1097,得分:96分,耗时2小时30分钟(1096扣2分,1098扣2分,什么坑没看出来。对堆排和插排没有达到闭着眼睛写出来的地步,还需要在纸上比划比划才行,所以1098比较耗时间)
晚上,自己给自己出题(1)N皇后问题;(2)中序+层序构建二叉树;(3)求普通二叉树的LCA;(4)求关键路径
1 #include <cstdio> 2 #include <cstdlib> 3 const int maxn=100; 4 int table[maxn];//table[x]=y,对应(x,y) 5 int n,tot=0; 6 7 //按列排放 8 void dfs(int x) 9 { 10 if(x==n){ 11 tot++; 12 return; 13 } 14 for(int y=0;y<n;y++){ 15 table[x]=y;//假设把皇后放在(x,y)处 16 //检验 17 bool flag=true; 18 for(int i=0;i<x;i++){ 19 if(table[i]==table[x] || abs(table[x]-table[i])==x-i){ 20 flag=false; 21 break; 22 } 23 } 24 if(flag) dfs(x+1); 25 } 26 } 27 28 int main() 29 { 30 scanf("%d",&n); 31 dfs(0); 32 printf("%d",tot); 33 return 0; 34 }
//level + in -> buildBiTree #include <cstdio> #include <vector> using namespace std; const int maxn=100; struct Node{ int val; Node *lchild,*rchild; Node(int v):val(v),lchild(NULL),rchild(NULL){} }; int n; Node* buildBiTree(vector<int>& levelOrder,vector<int>& inOrder,int inL,int inR) { if(levelOrder.size()==0) return NULL; Node* root=new Node(levelOrder[0]); int pos=inL; while(inOrder[pos]!=levelOrder[0]) pos++; int leftCnt=pos-inL; vector<int> leftSubTree,rightSubTree; for(int i=1;i<levelOrder.size();i++){ bool beRight=true; for(int j=inL;j<pos;j++){ if(levelOrder[i]==inOrder[j]){ leftSubTree.push_back(levelOrder[i]); beRight=false; break; } } if(beRight) rightSubTree.push_back(levelOrder[i]); } root->lchild=buildBiTree(leftSubTree,inOrder,inL,pos-1); root->rchild=buildBiTree(rightSubTree,inOrder,pos+1,inR); return root; } void preOrderTraversal(Node* root) { static int k=0; if(root){ printf("%d",root->val); if(++k < n) printf("->"); preOrderTraversal(root->lchild); preOrderTraversal(root->rchild); } } Node* findLCA(Node* root,int u,int v) { if(root==NULL) return NULL; if(root->val==u || root->val==v) return root; Node* pLeft=findLCA(root->lchild,u,v); Node* pRight=findLCA(root->rchild,u,v); if(pLeft && pRight) return root; else return pLeft?pLeft:pRight; } int main() { freopen("pat.txt","r",stdin); scanf("%d",&n); vector<int> level(n),in(n); for(int i=0;i<n;i++) scanf("%d",&level[i]); for(int i=0;i<n;i++) scanf("%d",&in[i]); Node* root=buildBiTree(level,in,0,n-1); //preOrderTraversal(root); Node *ptr = findLCA(root,4,5); printf("%d\n",ptr->val);//2 ptr = findLCA(root,4,1); printf("%d\n",ptr->val);//1 ptr = findLCA(root,2,6); printf("%d\n",ptr->val);//1 return 0; }
//Critical Path #include <cstdio> #include <vector> #include <queue> #include <stack> #include <algorithm> using namespace std; const int maxn=100; struct Node{ int v; int w; Node(int v_,int w_):v(v_),w(w_){} }; vector<Node> Adj[maxn]; vector<int> pre[maxn]; int inDegree[maxn]={0}; int ve[maxn],vl[maxn];//结点的最早开始时间和最晚开始时间 stack<int> stk;//存放逆拓扑序列 int n,m,s,e; bool topoSort() { fill(ve,ve+maxn,0); priority_queue<int,vector<int>,greater<int>> q; for(int u=0;u<n;u++) if(inDegree[u]==0) q.push(u); while(!q.empty()){ int u=q.top(); q.pop(); stk.push(u); printf("%d ",u); for(auto node:Adj[u]){//u->v if(ve[u]+node.w > ve[node.v]) ve[node.v]=ve[u]+node.w; inDegree[node.v]--; if(inDegree[node.v]==0) q.push(node.v); } } return stk.size()==n?true:false; } void process() { fill(vl,vl+maxn,ve[n-1]); while(!stk.empty()){ int u=stk.top(); stk.pop(); for(auto node:Adj[u]){//u->v if(vl[node.v]-node.w < vl[u]) vl[u]=vl[node.v]-node.w; } } for(int u=0;u<n;u++){ for(auto node:Adj[u]){//u->v int ae=ve[u],al=vl[node.v]-node.w; if(ae==al){ pre[node.v].push_back(u); printf("%d->%d\n",u,node.v); } } } } vector<int> path; void dfs(int u) { path.push_back(u); if(u==s){ for(auto it=path.rbegin();it!=path.rend();it++) printf("%d ",*it); printf("\n"); return; } for(auto p:pre[u]){ dfs(p); path.pop_back(); } } int main() { freopen("pat.txt","r",stdin); scanf("%d%d%d%d",&n,&m,&s,&e); int a,b,w; for(int i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&w); Adj[a].push_back(Node(b,w)); inDegree[b]++; } bool flag=topoSort(); if(flag){ printf("topoSort success\n"); process(); printf("min time needed:%d\n",ve[n-1]); dfs(e); } return 0; }
##2018-09-07##
9.07 上午第14套:1092~1095,得分:100分,耗时:2小时16分钟(前三题水,最后一题居然做了那么长时间!)
下午做不下去了,感觉有些无所事事,后来在牛客网上做了一道题,瞎玩的,代码贴下面:
#include<stdio.h> int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++){ int tmp; char op,ch1,ch2;//op吸收操作符,ch1,ch2吸收无用的符号 while(scanf("%d%c",&tmp,&ch1)!=EOF){ double ans[210]={0},sum=0; ans[0]=tmp; int size=0; while(scanf("%c%c",&op,&ch1)!=EOF){ scanf("%d%c",&tmp,&ch2); switch(op){ case '+': ans[++size]=tmp; break; case '-': ans[++size]=-tmp; break; case '*': ans[size]*=tmp; break; case '/': ans[size]/=tmp; break; } if(ch2=='\n') break; } for(int i=0;i<=size;i++){ printf("%.2f ",ans[i]); sum+=ans[i]; } printf("%.2f\n",sum); } } }
明天就要去杭州考试了,祝自己好运吧,加油!相信这段时间的努力不会白费的!!!
##2018-09-09##
考完了,有点遗憾。后三道做出来只花了1个小时30分钟左右,最后一题求普通二叉树的LCA还真被我预测中了,很快就写完;第三题扣了3分我觉得不碍事儿,于是就开始做第1题,此时还有一个多小时。看了一眼当时大家的提交通过率,第1题居然是最低的,我觉得第1题肯定会很坑——这真的是一个不好的心理暗示!然后就开始看题目了,果真,是有点坑,题目都读了好几遍,然后开始在纸上模拟。一开始毫无思绪,思路陷入误区,按照那个思路都不能模拟出正确答案,这个时候心理开始有点波动了。然后时间大概还剩40分钟不到一点,我突然意识到,这tm只是一道20分的题,肯定是自己想难了,于是想到用暴力,马上在纸上写出了部分关键代码,然后进行验证,结果答案是错的,时间还剩20多分钟的样子,这个时候感觉上已经不能很好的静下来思考问题了,脑子思路很乱,接下来就一边想一边debug,过程中没能很好的调节好自己的心态,直到最后都没解决,分值最低的第1题结果就这么凉凉了。
走出考场的时候,看到操场上正在军训的浙大新生,突然,就那一瞬间——我感觉自己好像老了。我都已经毕业一年了。光阴易逝,唯经历过方能知晓,这种感觉,真的五味杂陈,难以用言语来描述。晃过神来,我反思刚刚的考试,在前一个半小时我觉得自己做的太顺了,似乎有了拿满分的希望(至少拿个90+应该是没问题的,我想),但是后半段看到大家第1题的提交通过率的时候给自己的心理暗示,让自己潜意识会觉得“肯定会很难”,这一点是最致命的地方,直接导致自己在做题的时候思路受限,心里的小人不断在烦扰“这一题很难啊,这一题很难啊...”。可是,考都考过了,吸取经验吧!这也在警示自己,平时一定要加大模拟强度(从时间和题量/题型两个维度考察),只有经过反反复复的模拟练习,给自己创造那种“高压”的状态,才能在考场上临危不乱。考前虽然自己也模拟了10多套,但是总的来说做的都比较顺利,以至于没有体会过“高压”的状态。
回来的高铁上,自己算了一下,发现机试考80和90分对最终成绩的影响其实不大,所以这个分数也可以用了。虽然整个暑期投入PAT的时间相当的多,能上90是最理想的(考满分就需要一些可遇不可求的运势了),但是也不能否定自己的努力。永远要保持自信,看到群里总是有人在说“我就刷了半个月,还是0基础”,如此芸芸,随他去吧。考研最最最最关键的还是初试分数,收拾好心情,接下来的100天,拼了!
##2018-09-26##
今天报名了,有点慌,抓紧时间刷题吧!加油!竭尽全力吧!
##2018-11-14##
还有37天了,好累,坚持住。行百里者半九十,一年的努力不能白费,最后的冲刺,加油!追求那些令人热泪盈眶的东西!
##2019-02-14##
明天出分了。保佑我吧!
##2019-02-15##
努力没有白费,初试399。接下来个把月好好准备复试!加油,就是干!
##2019-08-19:考研日记的最后一次更新##
距离上一次更新已经过去很久很久了,这期间自己用Github+Hexo搭了博客,不过用了一段时间觉得我并不喜欢,原因诸多,所以在那上面写了几篇文章之后又被我弃用了,最后还是决定回归这里。我会好好耕耘自己的博客,尽量写出高质量的博文。在哪个平台写博客并不重要,写出高质量的博客才重要,是吧。
哦,对了,我是考上浙大了,并且名次也还不错。几个月前我就来学校学习了,在这里遇到了一些同学,有很强的如本科就在MSRA、阿里等实习的;也有比较菜的如除了考研科目之外其他啥都不知道的。不过大家真的都超级努力,这一点是最直观的感受。我是比较菜的吧,没有拿得出手的项目,没有大厂实习经历,基础一般,现在的方向还有点迷茫,虽然不至于像部分同学那样完全的“0基础”跨考,但本科非科班,缺少了4年的系统学习,终究和牛人有很大差距,欠下的技术债终究是要慢慢偿还,因为我想成为一个很厉害的人啊。唯一庆幸的是现在有时间可以自由的学习,希望自己能不负光阴,再回头看时,说我做到了。
删了很多之前写的博文,因为博文质量不高。这篇还是留下了,不过这是最后一次更新。其他的,等我把故事写完,再把它说给你们听。(接下来好好写技术文章