a-young-man-jrs

C++博客 联系 聚合 管理
  5 Posts :: 2 Stories :: 1 Comments :: 0 Trackbacks

2009年5月22日 #

<embed src="http://www.56.com/deux_86551410.swf"  type="application/x-shockwave-flash" width="450" height="377"></embed>
<embed src="http://www.56.com/deux_86551410.swf"  type="application/x-shockwave-flash" width="450" height="377"></embed>
posted @ 2009-05-22 23:16 神剑戎 阅读(260) | 评论 (0)编辑 收藏

一般来说,我们安装这三个插件就够了:“FileEdit,CodeProcessor ,TZTester”,把他们下载了之后,放在一个文件夹里面,并且要保证以后不要移动这个文件夹的位置(该文件夹尽量处在桌面路径附近)!

 

一:
登陆arena之后,选择:Options → Editors,调出了新的窗口,按Add

在name栏填FileEdit,EntryPoint栏填fileedit.EntryPoint,路径的话,直接浏览FileEdit.jar所在的位置即可,按OK

(*)选定FileEdit(高亮显示),按configure,根据自己的要求配置一下。

注意每一步之后都不要忘了“save”和“close”

 

二:

继续options → Editors,调出了新的窗口,按Add(ps:这次要添加以上全部三个文件包括“FileEdit.jar")

这一次name栏填CodeProcessor",EntryPoint栏填codeprocessor.EntryPoint,路径栏直接浏览三个文件就可以(当初我看他们的文章,他们说三个路径之间要加分号,实际上只要依次浏览了三个文件,该栏上显示的三个路径,自然以分号相隔),按ok

选定CodeProcessor(高亮显示),按Configure

在Editor EntryPoint栏,键入fileedit.EntryPoint(如果你再按后面的Configure的话,就会发现和前面加*的那一步,调出来的菜单一样,就是配置编辑器选项而已)

在Processor Class栏,键入tangentz.TZTester,按Verify,弹出窗口OK,按OK键

别忘了保存,save

选择CodeProcessor做你的Default Editor, 按 Save键

 

三:

完成咯!注意:在上面的“二”之前一定要有上面的“—”;对于codeprocessor.EntryPoint和fileedit.EntryPoint,照填就可以,没有“(case sentive)”,这个括号只是告诉我们名字是大小写敏感的而已;Options → Editors,调出的窗口上面的common path空着就可以(反正下面浏览文件时,自动填入的是绝对路径)

首先我们上http://www.topcoder.com/tc?module=Static&d1=applet&d2=plugins这 里下载几个插件,主要是这三个:1.Plugin Name: TZTester   2.Plugin Name: CodeProcessor 3.Plugin Name: FileEdit,下载后如果他们的后缀名变成了*.zip,记得把他们改回.jar的。
然后登陆Arena,选择"option"->"editor",然后“Add”,Name那里可以自己起一个,例如“MyEditor”, EntryPoint选择codeprocessor.EntryPoint,记得是大小写敏感的。然后在class path那里填入你插件的绝对路径,然后OK就好了。
好了之后,把添加的插件选上“default”,然后选中它,按config。Enter EntryPoint那里填fileedit.EntryPoint,processor class填tangentz.TZTester,然后按一下Verify,如果都found到,那就一切正常。
然后按configure,勾上“Write the problem description using HTML”,把File Extension那里改成html,这样题目描述就会被生成一个html文件,方便看题。把Backup existing file when overwrite 的勾去掉吧,没什么用。
在“Enter directory read/write problems to:”这里填上你放程序文件的绝对路径
然后按一下code template,把language改成c++,把一下模版贴上去:


$BEGINCUT$
$PROBLEMDESC$
$ENDCUT$
#line $NEXTLINENUMBER$ "$FILENAME$"
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
using namespace std;

#define PB push_back
#define MP make_pair

#define REP(i,n) for(i=0;i<(n);++i)
#define FOR(i,l,h) for(i=(l);i<=(h);++i)
#define FORD(i,h,l) for(i=(h);i>=(l);--i)

typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<double> VD;
typedef long long LL;
typedef pair<int,int> PII;


class $CLASSNAME$
{
        public:
        $RC$ $METHODNAME$($METHODPARMS$)
        {
                $CARETPOSITION$
        }
        $TESTCODE$
};

// BEGIN CUT HERE
int main()
{
        $CLASSNAME$ ___test;
        ___test.run_test(-1);
        return 0;
}
// END CUT HERE

然后一起保存,就OK了。关闭Arena,再打开,现在打开一道题目看看,是不是很方便^_^


posted @ 2009-05-22 09:35 神剑戎 阅读(3498) | 评论 (1)编辑 收藏

2009年5月21日 #

http://blog.csdn.net/pongba/archive/2009/02/16/3896311.aspx

(一)为什么你应该(从现在开始就)写博客

用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处。(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极大损伤一样)

让我说得更明确一点:用博客的形式来记录下你有价值的思考,会带来很多好处,却没有任何明显的坏处。Note:碎碎念不算思考、心情琐记不算思考、唠唠叨叨也不算思考、没话找话也不算思考,请以此类推。

下面是我个人认为写一个长期的价值博客的最大的几点好处:

1) 能够交到很多志同道合的朋友。我自己既写博客,也读别人的博客,在这个时代,对于生活中的绝大多数人来说,拓宽朋友圈子的途径几乎只有一个,通过网络,而如何在网络中寻找到气味相投的朋友,如何判断别人和自己是否有共同语言?显然,通过天天在SNS上碎碎念的那些日记是难以做到的。我佩服的一些朋友几乎全都是长期用博客记录想法的人,因此,和他们即便不打照面,也是心照不宣。即便素未谋面也能坐下来就聊得热火朝天。

为什么博客在结交志同道合的朋友方面的潜力要远胜于原始的交谈方式?很简单,第一,博客无地域限制,整个互联网上从A到B只有一个点击的距离,而传统的建立朋友圈子的方法则受到地域限制。第二,也是更重要的一点,即如果按照以前结交朋友的方式,需要互相聊天,交流观点,然后才逐渐熟悉起来,这需要一个较长的过程,而且更糟糕的是,当你遇到另一个陌生人,又要把整个过程重复一次,表达你已经对老友表达过的那番想法。可博客却做到了“一次表达,无数次阅读”,当我看到一个写了好几年的博客,看完了之后我仿佛和这个人交谈了很久,用程序员们喜欢听的话来说就是,“博客极大地增强了话语的复用性”

我曾在CSDN上写了近六年的博客,在一年半前建立了一个Google Groups(TopLanguage),由于我的博客的长期阅读者都是互相有共同语言的,因此这个Group一开始就热火朝天,而高质量的技术讨论则进一步吸引了更多的牛人的参与,雪球滚起来之后,就很难停下来了,将近一年半下来,从这个Group的讨论中我获益良多[1]。而对于非程序员朋友,科学松鼠会则是一个很好的例子。

2) 书写是为了更好的思考。我在《书写是为了更好的思考》里面详细总结了书写的好处,这里就不拷贝粘贴了。

3) “教”是最好的“学”如果一件事情你不能讲清楚,十有八九你还没有完全理解。绝大多数人应该都知道在程序员行业面试官经常要求你讲解一个东西给他听,他会说他不懂这个东西(他如果真的不懂的话效果其实是最好的),而你的任务则是说到让他理解为止。

为了让一个不明白的人做到明白,你必须要知道从明白到不明白他究竟需要掌握哪些概念,这就迫使我们对我们大脑中整个的知识体系来个寻根究底,把藏在水面之下的那些东西统统挖出来,把大脑中的那些我们知道、但不知道自己知道的潜在概念或假设(assumptions)都挖出来,把它们从内隐记忆拉扯到外显记忆中。因为只有完全知道、并知道自己知道一切来龙去脉的人,才能真正把一件事情讲得通通透透

但是,你可能会怀疑,那除了能够讲清楚之外,弄清自己到底知道哪些东西还有其他什么好处吗?如果没有其他好处,那我又何必费这个劲呢?我又不当老师。

TopLanguage上的一位朋友sagasw曾经讲了这样一个小故事:据说在某个著名软件公司里,开发组的桌上会放着一只小熊,大家互相问问题之前,先对着小熊把问题说一遍,看能不能把问题描述的清晰,基本上说的比较有条理以后,答案也就随之而来了。当然,你不一定要对小熊说,你可以在大脑中虚构一个听众,一个不懂行的听众,然后你说给他听。这是可行的,我经常在路上用。不过如果你能坐下来,我建议你还是说给实际的听众听——即写下你的思考,因为书写是更好的思考

我们的绝大多数知识在绝大多数时候都隐藏在潜意识中,其实我们意识的窗口很小,我们的工作记忆只能容纳寥寥数个条目(记得那个“看你能够记住屏幕上同时闪现的多少个数字”的flash小游戏吗?),我们平时所作的推理过程很大部分都是自动的,发生在潜意识中,而我们只能感知到一些中间结论。不信你回忆一下你在和别人讨论问题的时候有多少次觉得“反正就是这样,我感觉得到它是对的,但是你问我,我也说不清到底怎么回事”,对此你不觉得很奇怪吗?如果你都不能从逻辑上支持你的结论,你怎么就能确信它是对的呢?仅仅因为你的直觉强烈地告诉你它是对的?那如果旁边有另一个人,他和你持相反的观念,而他的直觉也强烈地告诉他他是对的。这时候你又怎么想?“他的直觉错了,我的直觉是对的”?难道你这么自信你的直觉是世界上最可靠的?

我自己则是非常珍惜类似这样的机会,即当“我强烈地觉得它是对的,但我却说不出所以然来”,这时候往往是到大脑中翻箱倒柜的时候,弄清来龙去脉的时候,深入反思的时候,纠正一直以来错误的潜在前提假设的时候。另一方面,“我强烈地觉得这个说法有问题,但我却说不清它为什么有问题,到底哪有问题”,这也是一个极有意义的瞬间,它几乎总是意味着你对一个问题的认识有潜在的偏差,肯定是在你自己都没有觉知到的地方引入了一个潜在的假设、偷换了一个重要的概念,等等。而这种时候就是深入反思的时候,当你终于潜到问题的底层,触摸到问题的实质,把水面之下的冰山整体看清了的时候你会有一种通体舒泰的感觉。

为什么说以上这些?因为刚才说的是你必须等待这样的反思机会,但如果你选择经常总结自己的知识体系,并说出来给你的读者听,你就会发现你自己创造了这样的机会。如果我们平时不反思,我们觉得很多事情都是当然的,但结果如果要你一开口说给别人听,常常会发现事情就开始变得不那么明显了,你说着说着,就开始莫名其妙地发现自己需要用到“反正”这个词了。

于是,反思的机会就来了。

一旦你把自己潜意识里面的东西从幕后拉出来,你就有了面对并反思它们的可能,而不是任它们在幕后阴险地左右你的思维。很多时候我们的思路出了问题并不是我们不会反思,而是不知道自己的思维中有那些隐含的假设(assumptions),如果你只感觉到答案,却不知道你大脑得到这个答案之前做了哪些推理,你又怎么知道哪一环可能出了问题呢?另一方面,一旦你弄清了自己到底是怎么想的,离意识到问题就不远了,很简单的道理——如果别人和你争辩的时候总是只摆立场,你就很难和他辩,但如果他把自己的推理过程原原本本暴露给你,批判起来总是容易得多的。(也正因为这个原因有很多人总是把逻辑藏在背后,不敢暴露出来)

绝大多数时候其实我们都会不假思索地得出一些结论,就像上了发条的自动机,但其实我们并不知道这些结论到底怎么来的,在思维的背后到底发生了哪些事情,故而当我们发现我们的结论错了的时候,一头雾水,没法着手寻找到底在哪错了。如果你注意一下很多人的发言(论坛、博客等等),如果你把他们的发言分为“前提”、“假设”、“逻辑”、“结论”这四个部分,你会发现一大堆人只会不停地下结论,摆立场,却见不到这些结论或离场的前提、假设和个中逻辑,倒也不是他们不愿意写出逻辑,而是因为反思自己的思维过程实在是一件困难非常的事情,我们的推理过程很大一部分发生在意识的水面之下,只有当有了重要结论的时候这条逻辑链才会浮出来冒一个泡,让我们的意识捕捉到。更何况绝大多数时候我们用的其实并不是完整严密的逻辑思维,而是思维捷径

去教一个完全不懂的人,则是一种最最强大和彻底的反思途径——因为他没有任何预备的知识,所以要让他弄懂你所知道的,你就必须彻底反思你的知识体系,弄清这座大厦的根基在什么地方,弄清它的骨架在什么地方,一砖一瓦到底是怎么垒起来的,你不能自己站在11层上,然后假设你的读者站在第10层,指望着只要告诉他第11层有那些内容就让他明白。你的读者站在第一层,你必须知道你脚下踩着的另外10层到底是怎么构造的。这就迫使你对你所掌握的、或之前认为正确的那些东西作彻彻底底的、深刻的反思,你的受众越是不懂,你需要反思得就越深刻

4) 讨论是绝佳的反思。另一方面,很多时候我们并不是有机会说给完全不懂的人听,更大的可能性是说给同领域有一定基础的人听,这个时候并不代表就不能促使反思了,实际上,你会发现,如果你公开你的想法,几乎总能看到与你持不同意见的人,然后你通过比较你和他的观念之间的差别,会发现你们在一开始的思路上就存在差异,差异从哪里来的?在进一步讨论中你们就会不断地迫使对方拿出更深层次的理由,这同样也是一种非常有效地促使自己反思的方法,在讨论的过程中双方的理由自然会变得越来越深入,越来越接近问题的本质,一些平时难以注意到的深层面的差异性就会逐渐浮现出来,你也就多了一次难得的机会去审视自己的思维中到底存放了哪些错误的信息

5) 激励你去持续学习和思考。如果你没有持续学习和思考的习惯,你的博客很快就会没有内容可写,就只能整点碎碎念或者转载,然后你就会失去读者,然后你就会关掉博客,然后一旦关掉博客之后你也就死了写博客的心,然后就少了一条激励你去思考和总结的途径,然后你变得更不高兴总结和思考,然后…

为了打破这个死循环,不要永久停止更新你的博客,就算你两个月,三个月都不写,只要你每篇都是写自己思考的产物,写有价值的东西,在互联网上,金子的确总是会发光的,因为有无数的信息聚合平台在期待这些有价值的内容,有搜索引擎为你的内容提供海量的潜在读者,有海量的人肉在手动挖掘和转载那些有价值的东西。我们所能做的最差的一个决策莫过于停止做一件没有任何坏处,却有一大堆好处的事情

为了让你的博客有价值,你必须不断总结自己学习的结果,你必须不断思考,给出比别人深刻、独到的见解。这看起来有点本末倒置,但很快本和末就会正过来。

6) 学会持之以恒地做一件事情。很多人在生活中容易觉得迷失,不知道想要做什么,是因为没有一件能够持续地做的事情,用俗话来说就是没有主心骨。用积极心理学的话来说就是没有一件能够创造流体验的事情,而书写自己的思想则是一件容易产生流体验的事情,在书写的时候,特别是理性地书写的时候,大脑逐渐进入推理分析模块,一切不愉快的情绪,烦躁感都会逐渐消隐下去。不过前提是你得开始,并且坚持过一开始的困难期,以后的一切便成了习惯成自然。

7) 一个长期的价值博客是一份很好的简历。这里的“简历”并非是狭义上的求职简历,毕竟现在还没有到价值博客的时代,很多人写博客都是到处转载或者干脆碎碎念,正因此面试官未必拿个人博客当成了解一个人的更可靠窗口。这里的“简历”是指一个让别人了解自己的窗口,虽然我们未必做得到像罗永浩、Keso这样的博客,个人的影响力已经足以支撑出一份事业(牛博和5gme),但至少你会因此而结识更多的人,你的博客价值越高,你结识的人就越牛,跟牛人交流又会让你的眼界得到极大的开阔,打开一扇又一扇你原本不知道的门,于是你就变得更牛… 这是一个良性循环

(二)怎么做到长期写一个价值博客

注意到我并没有说“怎么做到长期坚持写一个价值博客”,因为当思考和总结成为习惯之后,诉诸文字以及借助书写来进一步思考就变成了一件自然而然的事情,就变成了一件“因为你在思考和总结从而必须书写下来”的事情,博客就变成了副产品。

一开始的时候你是因为要写博客而去使劲地思考和总结,指望给出令人眼睛一亮的东西,到了后来,就变成了因为你习惯了思考和总结,因为你意识到书写是更好的思考,你就必须使你的想法成为文字。至此本和末就会各归原位,不再颠倒。

怎样做到长期写一个价值博客?也许有人会给出很多有趣有用的小技巧来提供动机和激励,譬如如何做SEO,如何鼓励读者留言等等,但是这些我都不想说,我只想说最最重要的,那就是:

让你自己成为一个持续学习和思考的人,并只写你真正思考和总结之后的产物,其他一切就会随之而来。

就像那句经常被人传阅的话:只做你最感兴趣的事情,钱会随之而来[2]。

这方面的具体例子大家可以留意一下,随处可见,就不一一举了。我想再重复一下的是,千万不要碎碎念,我能理解每个人都想偶尔发发牢骚的冲动,但是现在已经有了一个很好的窗口:twitter,所以立即停止在你的博客上碎碎念,阅读博客的人希望得到信息而非噪音。如果实在忍不住想碎碎念的话不妨换一下位置,这么来告诉自己:如果你看到别人博客来上这么一段,你会有兴趣看吗?

(三)可能出现的问题以及怎样应付

即便上文给出了N条写博客的理由,但有时候只要一条不写的理由就会让人停止做一件事情。所以我特别加上一节“可能出现的问题以及怎样应付”,《影响力2》[3]第五章雄辩地证明,“Much of Will is Skill”,意志力很大程度上来源于有正确的方法,而非天生

1) 担心别人认为没有价值。事实是,你面临过的问题总会有人面临过,你独立思考了,别人没有,你的文章对他们就会有价值。当然,肯定会对某些人没有价值,他们早就知道了,但就算你再厉害,也总是有人比你厉害的,不能说因为这些原因就不记录你自己的想法了,你自己思考了之后理解得最深刻,就算有别人想过了,总有人没有想到的。况且,思考成了习惯,你的思考能力也会越来越强,你的文章也会越来越有价值。重复,无论你面临什么困惑,总会有很多人同样面临过,于是你苦苦思索之后的结果,肯定会对很多人有意义。

或者,你想通了之后觉得其实也很简单于是不愿意或者不好意思写了,但要知道,问题在想通了之后总是简单的,问题的困难程度不在于想通了之后还觉得有多难,而在于从你觉得它难到你觉得它简单需要耗费多少思维体力,你耗费的时间越长,说明有越多的人最终还是没有想明白(路越长走到底的人越少)。

最后,虽然我现在看一年前的文章觉得挺不成熟,但是如果没有那些不成熟的思考,也不会有现在更成熟的思考,我几年后来看现在写的东西,还是会觉得不成熟。

2) 担心想法太幼稚或有漏洞等等被别人笑话。人非圣贤。正是因为单个人的想法总是有漏洞,才值得拿出来交流(《书写是更好的思考》,讨论是绝佳的反思),被别人指出问题正是改进的空间,藏着掖着的想法永远不可能变得更成熟。

Much of intelligence is knowledge,有这么一个非常发人深省的经典心理学实验[4]:

将孩子们分成两组,通过给他们不同的阅读材料让一组相信智力是天生的,不可在后天改变的,另一组则让他们相信智力其实只是知识和技能的代名词,完全是后天习得的。接下来让他们做一组任务,那些被相信智力天生说的孩子,倾向于回避困难的任务,选择较容易的任务,这里的逻辑想必是这样的:如果做困难的任务,就增大了失败的几率,就在降低了自己在别人和自己心目中的智力的值。为了保护这个智力的值不被降低,应该避免那些有失败风险的项目。而另一组孩子则对于有挑战性的事情跃跃欲试,并且在失败的时候明显没有前者沮丧,因为失败也是学得新的东西,不管怎样都是“智力”的提高。

况且,只会批判乃至嘲笑别人的人是最不知道怎么建设的人,忽略他们。

3) 得不到激励。这其实是个最无聊的问题了,只有写碎碎念的博客才会面对“激励”的问题。如果写自己的总结,写自己独立的思考,那么书写下来、理解通透,本身就是一个极大的激励。就算放在自己的私密笔记本里面也一样有成就感。况且,如果你真做到了书写价值博客,那么绝对不用担心你的观点得不到传播,也许一开始会耗时长一点,但是这在任何事情上都是必要的初始阶段,Gmail小组的核心人物、FriendFeed创始人Paul Buchheit,和编程界名博Coding Horror的博主Jeff Atwood都曾经感叹过:Overnight success takes a long time ((1)(2)),不过对于价值博客来说,现在网络上的聚合类服务这么多,机器的、人肉的、半人肉的都有,情况又要好得多了,而且我相信情况还会越来越好。

4) 写不出来。这个问题也比较无聊,思考本不是一件急于求成的事情。长期订阅我的博客的朋友知道我一般发文频率在一个月三五篇,实际上有不少次我个把月也不发布文章,原因很简单,要么是有手头的事情要处理思考的时间被压缩了,要么是遇到比较大或者比较困难的问题需要长时间的思考和积淀,没有关系,如果没有想清楚就再想想,爱思考的人和不爱思考的人有一个本质的区别,前者在生活中总是挂着几个问题在大脑中,它们时常都会冒出来骚扰你一下,让你琢磨琢磨,不爱思考的则是没事不主动想问题,遇到问题还要先想想是否能找捷径(找人帮忙)解决。

无论如何,不用急于求成,在一个主题上深入下去思考,总能挖到别人挖不到的角落。你能让一个问题在大脑中停留的时间越长,就越是能够发现新的东西,一般来说,我认为有价值的问题我会让他在意识或潜意识中待短则一个星期,长则一个月(视问题大小而定),利用走路吃饭的时间琢磨(我发现很多我佩服的人也都有这个习惯),有时即便已经想通了写下来了发出去了,大脑仍然还是会在回味问题,还没有把它撤出潜意识,然后看到某篇文章或某本书的时候忽然又有所新的感悟

能够把问题长时间停靠在潜意识中是一种技能,能够带来很大的好处,停留得越长你越琢磨得透彻,比别人看到的就越多。我们必须要带着问题的眼镜看待事物才能发现新的视角,否则就会出现视而不见效应,别的不说,广为人知的例子是阿基米德的“尤里卡!”,如果不是长时间琢磨着一个问题,一直把它放在思维中,是不会从洗澡领悟到“排水测体积”的,否则他洗了那么多年澡怎么不早发现呢?[5]

所以,如果你习惯了思考问题,就总会有东西写,先有思考,然后有总结,然后在总结中进一步思考。

当然你也可以试试把不成熟的想法写下来,试图整理成条理清晰的文字,然后看看能否在整理的过程中走得更远。这往往是可行的。比如这篇文章在我的简记里面原本其实只有三行字(包含大约十来个备忘关键词),而最初在我的大脑里面其实只有一个走路时冒出来的问题——为什么要写博客?

--

[1] 你可以看一下我收藏的一些精彩主题

[2] 尽管我并不完全同意这句话本身,但它这种解决问题链上更基本环节的问题的精神是我赞同的。

[3] 《影响力2》这个名字起得很聪明,其实它并不是《影响力》的作者写的。

[4] 我忘了这则实验的出处了,但实验的精神是记忆犹新的,哪位同学记得原始出处的麻烦提醒我一下。

[5] 对于阿基米德这个故事的真实性是有争议的,毕竟几千年久远的事情谁弄得清呢。但是故事的道理是很本质的,我们平时也经常有类似的体验,加上阿基米德的“尤里卡”实在太出名了,所以我相信用用无妨。

posted @ 2009-05-21 16:02 神剑戎 阅读(210) | 评论 (0)编辑 收藏

http://sqybi.blogbus.com/logs/15221427.html

一个很古老但很有用的TopCoder教程,贴出来.因为不知道来源了,所以无法注明来源.
改了一下格式和里面一些内容,蓝色的部分是我大幅度更改的内容(似乎只有JRE的下载,已经实验,绝对可用).

1.基本规则
2.运行环境
3.注册与登陆
4.界面简介
5.练习
6.比赛
7.注意事项
8.代码编写

TopCoder(以下简写tc) URL: http://www.topcoder.com

1.基本规则
  tc的比赛规则归结起来就是一句话:75分钟做完3道难度递增的题。
  tc的每个用户(handle)都有自己的积分,从0-3000+不等。成绩越好,分数越高。比赛分为两个division。Div I和Div II。积分<1200或者unrated(即注册但还没参加过比赛的)参加Div II,>=1200的参加Div I。Div I的题要比Div II难许多。一般DivII的最后一题和Div I的第一或第二题是一样的。无论是Div I或Div II。三道题目的Score一般为250, 500和1000左右,视每次的难度略有浮动。个人积分(rating)的增减是根据你和别人在比赛中的score以及你们原来的rating决定的。tc的提交结合了ICPC和IOI的特点,即只能交一次,必须过所有数据并且得分与用时相关。tc每周有一次Single Round Match(SRM),每年两次大的比赛(有$)。

2.运行环境
  tc的客户端是一个java程序,所以需要jre( java runtime environment) 或者jdk( java development kit) 来运行。如果平时不写java程序的话,装jre就可以了。毕竟jdk比jre大一个数量级,下载慢。安装照着提示完成就行了。推荐使用1.4.1以后的版本,因为带了java web start,可以快速登陆。具体方法下一部分讲。
  sun公司主页上的JRE Version 6 Update 3(最新)下载地址:
  http://www.java.com/zh_CN/download/index.jsp

3.注册与登陆。
  点主页右上角的register注册,过程没什么好说的。
  注册好后就可以登陆了。有两种方法:
  a.点左侧的Launch Arena Applet
    点后弹出一个窗口,等一会后就出现一个Load Competition Arena的按纽。 点击就运行了客户端。注意不要把这个小窗口关掉,否则客户端会一并关了。这个方法在win2000下有时候会有问题,但是在98下是正常的。不推荐。
  b.通过java web start运行
    topcoder主页底部有一栏如下:
    ---------------------------------------------------------------------
    | Java Web Start                                                    |
    | Run the Arena as a Java Web Start Application                     |
    | JWS already installed? Load the Arena as a Java Application       |
    | Arena Plugins—Information and Downloads   ~~~~~~~~~~~~~~~~这里   |
    ---------------------------------------------------------------------
    把那个"Java Application"拖到桌面上建立一个快捷方式,以后双击就可以直接运行了。客户端启动后有一个窗口,填上申请的username和password,如果是用代理的话,把HTTP Tunneling选上。登陆后就到了主页面。

4.界面简介
  -----------------------------------------------------------------------
  |   Advertisements.............                                       |
  -----------------------------------------------------------------------
  | Main | Lobbies | Options | Practice Rooms | Active Contests | Help ||
  -----------------------------------------------------------------------
  |                                                 | Clock |           |
  -----------------------------------------------------------------------
  | Rating Key | Who's here |                 Chat Area                 |
  |     .      |            |                                           |
  |     .      |            |                                           |
  |     .      |            |                                           |
  |     .      |            |                                           |
  |     .      |            |                                           |
  |------------|            |                                           |
  |  MESSAGES  |            |                                           |
  |------------|            |                                           |
  |LEADER BOARD|            |                                           |
  |------------|            |                                           |
  |            |            |                                           |
  |            |            |-------------------------------------------|
  |            |            | >>_______________________________________ |
  -----------------------------------------------------------------------
                          (宽度太小,缩放了一下:)
  逐部分说明一下:
    Advertisements: No comment.
    Menus:
      Main里可以看在线名单和找人。
      Lobbies基本用不着,因为用户一般都在Chat Room 1
      Options里是一些选项和颜色设置。
      Practice Rooms里有大量的练习,都是以前比赛的题目
      Active Contests只有有比赛的时候才有用。
      Help里是....不用说了吧。
    Rating Key: handle的颜色是随着积分而改变的,这里显示了积分与颜色的关系。
    MESSAGES: 比赛的时候这里有注册提示和clarification。
    LEADER BOARD: 看每个room的最高分。
    Who's here: 当前room里的人。
    Chat Area: 聊天。

5.练习
  在Practice Rooms里随便选择一个room就可以进入practice了。
  界面与主页面稍有变化,但基本相同,略去不画。主要的变化就是Who's here分成了两块,多了一块Who's assigned。这块显示的是谁被分到了这个room。因为是练习区,所以只要是在这里打开过题的都算是assigned。而在正式比赛中room是由tc分配的。这里显示的是被分配到这个room的人。界面上还有一个变化是Chat Area顶上多了三块。最左边的是一个下拉菜单。里面有三个分值,选择后就可以打开相应的题目。中间的summary可以看这个room里每个人的提交情况。
  在practice room里只有coding phase。提交后要判的话需要自己选择Practice Options里的Run System Test。

6.比赛
  每次比赛(除了1年两次的大赛)都需要在赛前3小时-5分钟之间登陆注册方可参加,注册在Active Contest菜单的第一项。一般需要回答一道选择题(多半是调查)才能注册。到剩下5分钟的时候,注册终止,tc开始按照报名者的rating分配room。分配完成后,Active Contest菜单中Register一项变成Enter。选择后可以直接进入你被分配到的room。Active Contest菜单最下面还有一项暗色背景的Room子菜单,可以进入各个room溜达。进入自己room的时候一般离开始只有3分钟左右,静一下心就可以直接开始比赛了。
  coding phase的过程与practice基本相同。注意每题的得分是和用的时间相关,而时间是从你打开该题开始算的。所以一题做完后可以不急着打开下一题,先放松一下。
  75分钟的coding后是5分钟的intermission,这段时间是用来休息和聊天的。
  然后就是最刺激的15分钟challenge phase。打开summary,双击别人的各题Score可以打开那题的程序,如果觉得有错误就可以点左下的Challenge然后输入你认为他会错的数据,成功的话能得到50分,对方该题分数为0;而如果失败了,你会被减去50分。所以若不是考虑成熟或背水一战的话,最好不要随便Challenge。
  Challenge结束后就是System Test。这个过程一般比较慢,可以先走开做其他事。过20分钟再回来看结果。结果出来后再过一段时间就可以看到一系列message比如rating更新了,新的practice room建好了以及可以通过主页查看这次比赛的数据了。

7.注意事项
  a.主页上有一份日历,日历下面的More 2003 Match Dates点进去可以看到最近比赛的时间安排。注意当前我们的时间与他们刚好相差12小时,因此若时间是7月9日9:00 P.M.的话,这里是7月10日9:00 A.M. 还有要注意的是美国有夏令时,非夏令时的时候,还要再加1小时,就是7月10日10:00 A.M.。
  b.Practice Rooms里写的程序只要点SAVE就可以保存,下次login的时候还可以看到,但是比赛时候的程序必须Submit才可以在coding phase结束后保存(coding phase结束前还是只要SAVE就可以的)。
  c.若想cha别人的程序,自己必须是正分(0分也不行),所以若没有一题有正确的程序但有很好的数据的话,随便交一道看上去正确的程序,然后在challenge的时候快下手,就可以赚到了。
  d.客户端自带的编辑器只有基本的编辑功能和编译及测试功能(连自动缩进都没有)。所以若觉得不方便的话可以使用parser和plugin,tc主页最下面有plugin的连接。因为我没有用过,所以具体方法不详。
  e.tc的FAQ
    http://www.topcoder.com/?&t=support&c=index
  f.最后一条,千万不要作弊,会有严重的后果。

8.代码编写
  tc的程序都不用标准或文件输入和输出的,只要写一个类的一个成员函数。
  输入是参数,输出用return,所以需要stl中的vector和string。
  标准输出可以当调试用。

  比如这题:

  Problem Statement for LeaguePicks
 
  Problem Statement
    You and your friends are setting up a fantasy TopCoder league, where you choose coders to be on your team and score points in the league when any one of your coders wins their room or successfully challenges somebody, etc. To be fair, a system has been developed to choose the order in which picks are distributed. It works like this: first, lots are drawn to choose your position in the league. Then the player with the first position gets first pick, the second player gets second pick, all the way until the last player picks. Then the order reverses: the last player chooses again, then the next to last player, and so on, until you reach the first player again. Then the cycle repeats: the first position chooses again, then the second, and so on.
    For example: say you were in the third position on a 6 player league. You would get the 3rd pick, then you'd wait until the 10th pick (the order would be 1,2,you,4,5,6,6,5,4,you), and then the 15th pick, and so on until there were no more coders to choose. If there were 20 total picks, then you would get pick numbers 3,10,15.
    Not wanting to miss your chance at a pick, your goal is to write a program that tells you what pick numbers you have in the order that you have them. You will receive three ints indicating your position in the league(1 being the first position), the number of friends that are in the league with you, and the number of picks that are being divvied up among the league. You will return an int[] that indicates the picks that you receive in ascending order.

  Definition
    Class: LeaguePicks                         //要写的Class名
    Method: returnPicks                        //要写的Method名
    Parameters: int, int, int                  //输入参数
    Returns: vector <int>                      //返回
    Method signature: vector <int> returnPicks(int position, int friends, int picks) (be sure your method is public)
 
  Notes
  - Note that your position in the league and the pick numbers start at 1 and not 0. This should be clear from the examples.
 
  Constraints
  - position will be between 1 and friends inclusive.
  - friends will be between 1 and 40 inclusive.
  - picks will be between 1 and 40 * friends inclusive.
 
Examples
  略

样例程序:
#include <vector>
using namespace std;
class LeaguePicks //只需要这个类就可以了
{
public:
vector <int> returnPicks(int a,int b,int c) //需要这个method
{
   vector <int> ret;
   int i;
   if (c>=a) ret.push_back (a); else return ret;
   if (c>=2*b-a+1) ret.push_back(2*b-a+1);
   for (i=0;;i++)
      if (ret[i]+2*b<=c) ret.push_back(ret[i]+2*b);
      else return ret;
   return ret;
}
};

posted @ 2009-05-21 14:44 神剑戎 阅读(560) | 评论 (0)编辑 收藏

2009年5月19日 #

http://blog.sohu.com/manage/main.do?tracker=applist
posted @ 2009-05-19 23:53 神剑戎 阅读(218) | 评论 (0)编辑 收藏

仅列出标题