最近没怎么写博客,是因为忙于保研的事情,今天只睡了5个小时一大清早就去第一个面了计算机,下午出了预录取名单,晚上上保研系统确定了志愿,可以说稍微有些宽下心来了。
我是从本校软件学院推免到计算机学院。
从之前的保研准备开始说起,说来惭愧,也只是刷了一些POJ的题目,可以见我之前的几篇博客,练得也是断断续续,但是勉强保持一点点状态,不过另一方面,这些题目涉及到的大多为高级算法,实际机试的时候基本用不到。
大概在八月份中旬的某一个出去交付的日子中去找了导师,基本就是通过浏览 https://mysupervisor.org 中的评价和一些从六系的人那里打听来的情报来联系这个导师,运气很不错,当天和他谈了两个多小时,刚好也没有人和他py了名额,就先这么说好了。后来报名做了他课的助教等事,在此略过。
之前曾经在大三寒假之前联系过北大数字媒体所,老师给我了一篇期刊一篇硕士论文让我下次讲讲,但寒假中有学长打广告招实习生,就鸽了北大,去了清华数据库实验室。但多数清华实习应该都是找保博的人,因为个人选择问题就没有和老师说想留在清华。但清华的这次实习经历非常重要,虽然一开始没什么事比较尴尬,后来做了一个留学生的助手,一是认识了这个有趣的人,二是在论文上挂了二作准备投顶会,算是很有价值的科研经历。
九月的时候,主要是因为基本想着就保计算机了,同时我院的推免名额又出得晚,等到拿到名额的时候,才发现清北浙南都没了名额(好多高考考砸出去拿国奖的同学都保回了浙大),并且计算机卡了一个时间点,也就是今天,不少在28日之前结束面试的学校都要求在今天的某个时间段完成确认志愿,否则视为放弃,而计算机的面试结果今天下午4点才出,足以让很多人放弃掉原有的offer。同时我报了一个武大的复试,只进行了QQ面试,就在昨天,不是压力面试,基本英文自我介绍之后就是闲聊,算是让我能在面计算机之前涨点信心。
前几天的准备,以考研机试题和考研复习材料为主,机试题基本是在 https://nowcoder.com 上练的,排序一定要掌握,在最后贴牛客上清华第一道的稳定排序题代码。同时牛客上也有一些选择题可以参考,不过真的好难。考研复习材料浏览一下即可,最后也没用上,准备出给室友。但可能对于一些抽题的面试,考研材料还是有一定价值的,但同时专业课基础课的基础功基本可以说是占大头。
昨天机试,第一道身份证号年龄+姓名字典序排序,不存在需要稳定排序的情况,所以直接用了qsort
,写一个比较函数就行,基本看题到验证完成20分钟。第二道是由以前的机试题修改而来,问的是窗口点击,可以参考ZoeMoon95的CSDN博客,但是今年提高了难度,在每个窗口中有字符串(等宽字体),经过多次点击之后,问某一个窗口的显示字符串是怎样的,如果某个字符被遮挡则用#
表示。首先差点输入就跪了,还好后来试出来cin
之后的换行符会被getline
读取,使用string _, text; getline(cin, _); getline(cin, text);
就可以把多余的换行符给干掉。一开始也是考虑去算intersection啊什么的,但是转念想想反正没说卡多少时间,直接用最简单的——一个一个字符判断是否被某一个窗口遮挡,只要算出每个字符的坐标就行了(真的要灵活啊我瞥到一个人用了三重for
不知道她过了没)。我用字符的左下角代表字符的坐标,所以和判断点击窗口不太一样,点击窗口点到边上也算点中,所以是x <= a <= x+w
,但是字符遮挡就是x <= a < x+w
。还发现样例的图中多了一个空格,一个窗口一行多了一个字符,方的一匹,不过机试老师说仅供参考,就把这个图的错误写在代码注释里交卷走人了。
后来和导师谈起机试和面试,他说就是出这种不算难的题,如果这样的题不过的话当然就被刷了。当然第一道题占60分,第二题40分,第二题应该做了一部分人的人应该比较多。
今早的面试,也没问啥,进去发简历,英文自我介绍,抽英文翻译,翻了个MapReduce(很多句子没准备好翻到一半才发现应该倒装很尴尬啊),然后抽政治题,瞎编了一点,就进入冷场。一个老师问我方差是啥,另一个问我面了哪些学校,是不是准备去清华这个,我说单纯实习,另一个问了清华的paper一作是谁我说学长,就,结束了。所以为啥面试分有190,我也不知道,不过这个分是经过面试组内的正态化过的,所以分数都是小数。
准备录取的时候有一些小插曲,由于我是软件学院软件工程,招生办强制我只能保计算机学院软件工程的学硕(虽然是真正的双一流A+啦捂脸),如果转其他专业只能给专硕,虽然学硕专硕并不是很介意,但还是要弄清楚。现在的老师是不分专业的,以前是学生选老师,老师是什么专业学生就是什么专业,现在老师可以带任何专业的学生。
其实我觉得啊,如果高考的时候已经做好了保研的打算,没准去分低一点的学校拿大班一二更容易保清北,像我就是十名多不尴不尬,硕士竞争激烈,博士名次不够(清华5%)。保本校的话就轻松一些,主要是基础功加一些小亮点。如果你是一位想保研的大一大二学生,一定要多做科研。
面试的时候我说“When looking back to the three years of university life, I see my limitations very clearly, I have not enough depth on research, not much experience on practicing.”这是真心话,现在既然保研已经尘埃落定,那另一程则该策马扬鞭。
清华机试 成绩排序(稳定)
#include
#include
#include
struct user
{
char name[25];
int grade;
};
void sort(struct user **begin, struct user **end, int (*comp)(struct user *, struct user *))
{
int length, index;
struct user **middle, **buffer, **p1, **p2;
if (begin + 1 == end)
return;
length = ((int)end - (int)begin) / sizeof(struct user *);
middle = begin + length / 2;
sort(begin, middle, comp);
sort(middle, end, comp);
buffer = (struct user **)malloc(sizeof(struct user *) * length);
index = 0;
p1 = begin;
p2 = middle;
while (p1 != middle && p2 != end)
{
if (comp(*p1, *p2))
{
buffer[index++] = *p1;
++p1;
}
else
{
buffer[index++] = *p2;
++p2;
}
}
while (p1 != middle)
{
buffer[index++] = *p1;
++p1;
}
while (p2 != end)
{
buffer[index++] = *p2;
++p2;
}
memcpy(begin, buffer, sizeof(struct user *) * length);
free(buffer);
}
int comp1(struct user *a, struct user *b)
{
return a->grade >= b->grade;
}
int comp2(struct user *a, struct user *b)
{
return a->grade <= b->grade;
}
int main()
{
int n, order;
while (scanf("%d", &n) != EOF)
{
struct user *users[n];
int i;
scanf("%d", &order);
for (i = 0; i < n; ++i)
{
users[i] = (struct user *)malloc(sizeof(struct user));
scanf("%s", users[i]->name);
scanf("%d", &users[i]->grade);
}
if (order == 0)
sort(users, users + n, &comp1);
else
sort(users, users + n, &comp2);
for (i = 0; i < n; ++i)
printf("%s %d\n", users[i]->name, users[i]->grade);
for (i = 0; i < n; ++i)
free(users[i]);
}
}