Posts Tagged ‘OI’

swap 的速度

Wednesday, March 24th, 2010

今天纠结于 swap 要显式地写出来还是写成函数。写成函数绝对要优美的多。

int main()
{
    int i;
    int a = 1, b = 2, tmp;
    for(i = 1; i <= 100000000; i++)
    {
        tmp = a;
        a = b;
        b = tmp;
    }
 
    return 0;
}

~~~ 一条分隔线 ~~~

void swap(int *a, int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
 
int main()
{
    int i;
    int a = 1, b = 2;
    for(i = 1; i <= 100000000; i++)
    {
        swap(&a, &b);
    }
 
    return 0;
}

显式的 swap 一次要 0.0000000035 秒。
函数的 swap 一次要 0.0000000057 秒。

我还试了一下 C++ 的 inline,发现没有速度的提升。

结论:用函数的 swap。这点速度损失没啥,然而一堆显式的 swap 不仅容易出错还极其影响心情。

一笔画

Friday, March 12th, 2010

就是拿着笔,放在纸上不抬起来,画出一些有意思的图形。

但是一般没有这么爽……一般是给你一幅图,让你一笔画出来。这也叫欧拉路径。

说起来特别简单。先找一个连接了奇数个点的点作为起点,把笔放下去。然后开始画,随便画。OK,成功了。

如果所有点都连接到偶数个节点,很好,画到最后又回到了起点。

计划

Monday, February 8th, 2010

NOI 这家伙对我来说有着无穷的吸引力。而今年我唯一能去NOI的机会。所以我必须要进入北京代表队。

我现在的水平在 NOIP 可以说是游刃有余,但拿到 NOI 难度的题目,往往是连想法都没有。所以在关键的3月和4月中,需要质的飞跃。3月需要整体提高水平,主要是通过刷完 USACO。4月我想做一些成套的题目。

完成计划的最好方法就是把她公开。好吧,我十分希望我能完成计划。于是我就把计划从紫皮本(08年忙机器人竞赛那会张镐薪传下来的。。。)搬到 Blog 上面,起到督促自己的作用。

2月10日-2月24日 准备 CCC 比赛。
2月25日-3月20日 USACO 通关(每天3道题左右)。
3月20日前 熟练掌握 GNU Emacs。

嗯。最近尽量减少各种娱乐活动。这不是 NOIP,所以也不能像准备 NOIP 一样欢乐和轻松。另外5月份我是不是找老魏商量商量逃课备战?

/* 本来准备的红警3系列文章因为贯彻落实减少娱乐活动的方针取消了,请见谅。 */

/* 5月17日的 blog post 会是喜还是忧? */

各种冬令营

Monday, February 1st, 2010

在那个欢乐又恐怖的冬令营中,我见到了张放、范浩强等牛。那真是让人只剩下佩服的份了。

冬令营有两试。一试我由于经验不足+时间分配不合理+RP爆差,只得了30分。二试我在刷完第一道背包的水题后,全力刷第三道。在只剩半小时的时候,还没有看到任何希望。我以为我的二试就这样挂了。可我最终还是调出来了——还剩20多分钟。然后是全速Rush第二题。最终得分是180(100+0+80,最后20分钟彪出的程序没有得分),我很欣慰,因为我的努力没有白费,第三题很给我面子。最终排在第6。

于是现在就面临一个扎手(……棘手)的决定。我要全力进北京队吗?如果真的进去了,我在NOI的竞争力将会如何?虚心地说,就现在的实力而言,还很欠缺。浅思欠虑后,我决定拼一把了。我这是最后一次去NOI的机会(虽然也是第一次)。

每个人的高中阶段只有一回,平平淡淡固然是一种选择,但却不是我想选择的。

最为空虚的最后一天下午,我逃出了“教学演示”的魔爪,在看“Revolution OS”。

/* 从上周五到本周三,我一直处于生病阶段,头脑比较不清晰。每天大约要睡15个小时。 */

查找时的哨兵

Tuesday, December 1st, 2009

今天偶然看到一个很巧的查找技巧,跟大家分享一下。

假设有一个数组a,要找到一个n使a[n]=key。

很简单吧,先看看一般的方法:

for(i = 1; i <= a.length; i++)
	if(a[i] == key)
		break;
// now a[i] = key, i > a.length means not found.

看看很巧的用哨兵的方法:

a[0] = key;
for(i = a.length; ; i--)
	if(a[i] == key)
		break;
// now a[i] = key, i = 0 means not found.

这样加上一个小小的哨兵(a[0])就节省了大约一半的时间!其实挺实用的。

介绍NDSOJ

Sunday, November 22nd, 2009

这是一个在线评测系统,目前也就是个看题系统,尚处于不能用阶段。
看看:http://www.shiyihcc.com/xhacker/NDSOJ/
项目页面:http://code.google.com/p/ndsoj-online-judge/(哈哈,还很空洞)

今年备战NOIP的日子里,Vijos常处于挂掉的状态。不是被黑客弄死了,就是遇到雪灾,总之是十分杯具。于是在一个无聊的上午(经查证为11月14日),我打开了一个无聊的Gedit,吓唬人似的写了一个页面——index.php。没有一丝设计,上面的标题是Gedit里面的一个配色(叫什么我忘了),下面的每一个box都是朴素的灰色。我只是无聊,只是恶搞。可是过了一会,我突然发现这是个好的想法。为什么我们自己就不能弄一个评测系统呢?于是杯具了。其实想法是好的,可是我认为在备战的时候有这个想法是错误的——它浪费(可能也不能叫浪费)了我太多的时间。看看这里吧,我14日到17日一直在努力改善它。要知道这可是……竞赛前最紧张的几天啊。所幸之后我清醒了一点。

但总之有一点不容置疑,那几天的努力已经让NDSOJ成为了一个可用的“看题”平台了。不过,最重要的“评测”部分现在还没有。不过,面包总会有的,只是时间问题。我已经决定把NDSOJ做下去了。

于是,今年之内除了评测的部分外应该是都能完工,寒假完事后全面OK。接下来的一段时间,它将作为十一学校的御用评测系统。直到我们有更多的服务器和评测机。之后就是对外开放。

那么,说来说去,这个OJ和别的有什么不一样呢?其实,我是想做一个“Online judge for human beings”。从界面就可以看出来,虽然丝毫没有经过设计,但它绝对是比其他的评测系统要方便的。在提交方式上,采用了文件提交的方法,也是为了最大限度的方便大家的操作。输入输出采用文件输入输出。另外,我们想把通过率这个东西去掉,还有就是开放数据。最后,这个评测系统是开放源代码的,你去Google Code就可以全部clone下来。

……说了半天,也有可能是空话,就看我是三分钟热度,还是真要做这么一个东西吧。不过有一点可以肯定,如果(注意,是如果)做出来了,那一定是中国最好的评测系统,没有之一。

44/44 = 1.

Saturday, November 21st, 2009

44天的集训在今天宣告结束。

在路上。

在路上。

咱学校参加NOIP的队伍,最左边是强哥。

咱学校参加NOIP的队伍,最左边是强哥。

一进八十中的教学楼,一股牛味扑面而来,熙熙攘攘的就是参加NOIP的各种牛。我们在414教室。

教学楼内牛味十足。

教学楼内牛味十足。

我的准考证。

我的准考证。

可爱的展板。

可爱的展板。

楼道。

楼道。

八十中的考试环境还可以,机子速度也还算挺快(256MB内存)。用的是NOI Linux,上面有Vim/Emacs,可惜我都不会用,眼睁睁瞧着世界上最好的两个编辑器叹息(有时间一定要征服一个)。我只会用朴素的Gedit,上面有我喜欢的Oblivion配色。于是,就他了,GUIDE滚一边去。考题加密压缩在一个包里,许多人解不开,于是我unzip xxx.zip,然后输密码,pdf就出来了。周围的还都在忙活呢。

适应适应很令我无奈的软趴趴的键盘,我就开始写程序了。第一道水题刷完后一个小时已经过去。第二道完事后还剩一小时二十分钟。看看第三题和第四题,第三题看起来是一道图论的,第四题是数独(于是我的第一反应,“深搜”!)。于是想都不用想,先做掉第四题再说。果然深搜,做完后还剩20分钟。这是传来了悦耳的声音:“延长20分钟。”我有点激动了,于是先出去上了趟厕所,权当是清醒一下头脑。然后,开始考虑第三题。看了一会,发现是传说中的Floyd。于是开刷。不过由于数据较变态,这题看来只能得最多撑死40分了(我用的邻接矩阵)。
考完后,我们一聊起来,发现今年没考动态规划。一想,确实没考,真实神奇。就在昨天晚上,孙韵佳(女,高三大牛,去年一等奖)还在跟我说:“动态规划学好了,NOIP就不惧了。”我一直也是这么想的。
总的来说,这回考的虽然不能说十分满意,但至少我觉得发挥了水平,没有特别遗憾的地方。我知足了。
关于分数,我估计最多280/400,大概也就250左右(没准更糟糕)。不过总之,大约20分钟之后就知道了。那是的心情会是高兴?还是?不过,管他呢,反正我算是考完了。

不管这回结果怎样,我已经和喷壶(胡颖健)说好了,以后每周日刷USACO,争取早日通关。另外,接下来的时间里,我还将致力于NDSOJ的开发(这个……我可能过几天会发篇post详细介绍一下)。

另外昨天有人想看NOI Linux的模样,那就发一下吧。个人十分鄙视NOI Linux,它让许许多多参加OI的同学对Linux产生了极其不良的第一印象,而这些人最可能成为中国计算机行业未来的牛人。顺便再发两张Chrome OS的截图(第二张是Google放出的)。

NOI_Linux_boot
NOI_Linux_login
NOI_Linux_Guide
chromeos_login
Chrome_OS_screenshot

最后,我要做的是感谢。首先感谢马强老师,还有一起集训的十几个弟兄。另外,就是陪伴我44天的Ubuntu、Gedit、Geany……为了报答Geany这个优秀的IDE,你们在Geany和Geany-plugins的下个版本就能看到完美的中文翻译了。

最后发几张原来的照片,回味整个NOIP 2009。

照片_100909_002
照片_101709_002
照片_101309_001
照片_110409_001
照片_111309_001


下周一回去上课了。

43/44, Final state.

Friday, November 20th, 2009

NOIP_map
这是截止今天19:00我的复习状况。XMind真好用。

刚刚Chrome OS下完了,明天发截图。明天同时奉上的还有NOI Linux的截图,请期待。

43/44, 最后一天。

Friday, November 20th, 2009

44天的集训已经接近尾声,明天就是考验我们的时候了。上午8:30-11:30做四道题,然后,下午3点就能出成绩。这就是信息学竞赛的强大之处——上午的竞赛,下午出成绩。

今年的NOIP似乎有许多变化。系统改用NOI Linux。一个基于Ubuntu 7.10的残废系统。7.10古老的内核导致NOI Linux十分不易在电脑上安装。用了一个糙到极致的Mac主题,其他主题都被删了。另一个变故,由于北京初赛有所谓的“缺考”,减少了5个名额。然而这还不是真正的噩梦。今年的一等奖分配有了变化,北京只分到了17个,减去5个,只剩12个……要知道去年是30+。
于是不得不变化策略。本来准备AC两道题,再骗点分搞定,现在则必须在另外两道题上下功夫了。不过,不论一等奖如何分配,自己的发挥是最重要的。所以,不管水平如何,名额怎样,我们都要满怀信心地进机房,我们都要确保简单的题AC——这样,无论如何不会留下遗憾。

明天下午,游戏结果就将揭晓。无论如何,我已经对09年12月 – 10年11月有了个计划。明天再写吧。

36/44, 这还有一周了

Friday, November 13th, 2009

今天是周五,明天是周六。我们的时间还剩下一周。

过去的一周,参加了若干模拟赛。虽然仍然极度受虐,但已经较一个月前的两位数分增加到三位数了(破百)。

这周高三的几个人加入集训,看到他们在刷USACO,谈论着1.2、1.3,我乐了。咱可是刷到2.4的人啊!刷USACO的那段时间,我还真是收获不小。不过,我不打算再往后刷了。这剩下的一周,看看一些常用的算法,做做经典的题,嗯。然后,坦然地面对复赛。

另:与OIer们分享一句话:“骗分的最高境界就是不骗分。”(来源:我是智障写的《骗分导论》,今天空虚时看了一下)