今天首次参加了topcoder的srm,处女战表现不佳:(下次要努力做好

把在网上找到的一些入门级文章转发到blog里,方便像我一样的新手,如有雷同,算我抄袭。

第一篇是关于topcoder比赛的一些规则

第二篇是介绍如何安装插件(有了插件后能节省不少时间)

TopCoder入门教程 — sqybi完善版

原帖地址:http://sqybi.com/blog/archives/25

基本规则
TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High School SRM,题目和SRM一样,仅限中学生参加,参赛者水平较低,据说涨rating很容易),马拉松(Marathon Matchs),还有TCOpen(每年两次的大比赛)之类的比赛。因为大多数人都在做SRM,所以本文介绍的TC比赛即为SRM。
SRM的规则总结起来就是一句话:75分钟做完3道难度递增的题。
TC的每个用户(handle)都有自己的积分(rating),从0-3000+不等。成绩越好,分数越高。
积分与颜色的对应为:白色——未参赛(unrated);灰色——0~899;绿色——900~1199;蓝色——1200~1499;黄色——1500~2199;红色——2200+。另外排名最高的几个人在TC客户端中会变成红色靶子图标。
比赛分为两个Division,Div I和Div II。白色灰色和绿色的参加Div II,蓝色黄色和红色的参加Div I。Div I的题要比Div II难许多,一般DivII的最后一题和Div I的第一或第二题是一样的。无论是Div I或Div II。三道题目的Score一般为250, 500和1000。
TC的计分规则很诡异,可以见http://www.topcoder.com/wiki/display/tc/Algorithm+Competition+Rating+System ,但基本是没人看的懂。不过,TC积分规则的基本思想很简单。
首先是SRM每道题的计分规则。题目从打开开始计时,随着时间的流逝,你这道题目可能得到的分数也越来越少。不过分数减少的速率会逐渐变慢(有人说是先快 后慢再快再慢,我不清楚到底哪个是对的,不过总体趋势是越来越慢),一般1000分的题目在降低到300分的时候就基本不会再下降太多了。每道题点击 Submit才算正式提交,如果Submit之后发现错误,还可以再次点击Submit修改提交,不过这样会扣除这道题一定的分数。
其次是TC的计分规则。复杂的数学公式很难看懂,但大概的计分思想是:根据此次比赛的得分算出一个这次比赛的rank,然后和以前的rank做比较,求出 一个期望的rank,再根据这个期望的rank调整rating。而有时也会出现考得很砸但依然涨rating的情况,不过总体来说TC的计分公式是十分 稳定的。

运行环境
TC的客户端是一个Java程序,所以需要JRE(Java Runtime Environment)或者JDK(Java Development Kit)来运行。如果平时不写Java程序的话,装JRE就可以了。毕竟JDK比JRE大一个数量级,下载慢。安装照着提示完成就行了。推荐使用 1.4.1以后的版本,因为带了java web start,可以快速登陆。具体方法下一部分讲。
JRE下载地址(中文): http://www.java.com/zh_CN/download/index.jsp

注册
原文在注册的地方没有详细说明,但很多人似乎对注册都有疑问。所以这里我来注册一个小号,并通过整个过程讲解如何注册。
首先打开http://www.topcoder.com/tc (本文后面TopCoder的主页都指这个网址),然后点击右上角的Register Now(没看到?你可能看到了一个Login,目光向下挪一点,那个红底白字的“Register Now”就在下面)。接下来会弹出http://www.topcoder.com/reg 这 个页面,因为我们要参加SRM,所以选择第一个,Competition Registration。如果要参加TCHS可以选择第二个High School (Secondary School) Registration。这些以后都可以更改(这里没有选的如果以后要选上,只需要更新个人设置并挑勾;如果选上的要撤销选择则需要点一个 “Unregister”的链接)。这里选择项目的多少和后面的页面需要填写内容的多少相关,本文以只选择第一项为例。
需要填写的项目和对应的中文翻译如下:

* Given Name:  名
* Surname:     姓
* Address1:  地址1
Address2:  地址2
Address3:  地址3(如果一行写不开,就在三行中分别写)
* City:   城市
State (US Only):  地区(不在美国就不用选)
Postal Code:  邮编
Province:  省
* Country:  国家
* Country to represent:  代表国家(不知道啥意思,中国人两个都填China就行)
* Timezone:  时区(选Asia/Chongqing)
Phone Number:  电话号码
* Email Address:  电子邮件
* Confirm Email Address:  确认电子邮件地址(就是把电子邮件地址重新打一遍)
Email Notifications:  邮件提醒(就是它给你发邮件提醒什么东西)
- Algorithm Competitions  算法比赛,就是SRM和TCOpen
- Software Development Opportunities  貌似就是有软件开发的项目就告诉你
- Employment Opportunities  工作机会
- TopCoder News & Events  新闻
* Enable Member Contact:  允许成员联系(似乎就是说是不是让别人在TC上能找到你)
* Show / hide earnings:  显示/隐藏收入(大概是说别人是不是能看到你赚了多少钱,TC的比赛可是有钱赚的)
* User Name:  用户名(下面的话提醒你一定不要填错,因为注册多个用户是不符合规定的。据说有人因为别人在TC客户端和他打招呼说“怎么你拿小号上了”,那个人的号就被封了)
* Password:  密码
* Confirm Password:  确认密码
* Secret Question:  密码找回问题(找回密码时需要回答这个问题,注意至少要8个字符长,而一个中文字似乎算一个字符,所以最后可能要打几个问号补齐长度)
* Secret Question Response:  密码找回问题答案
Quote:  座右铭,就是个签名档之类的东西
* Student/Professional:  学生/职业程序员
* = required  带*的项目必填

填写之后点Term of Use下面的I Agree,再点Submit,完成提交。除了用户名别的以后似乎都可以改。
接下来进入Demographics页面,这个大概相当于一个注册用户情况调查。

* Age :  年龄
* Gender :  性别(Male男,Female女)
* Ethnic Background :  民族背景(似乎选Asian or Pacific Islander就行吧……)
* Primary Interest in TopCoder :  在TC的主要兴趣,看不懂的就选第一个吧,那个是说你的兴趣在奖金……
* Shirt Size :  T-Shirt大小(有的比赛会给排名前N的选手发T-Shirt,这里你需要选择适合自己的大小,如果选最后一个说明你不想要T-Shirt,人家也不发你了。TC的T-Shirt还是挺好看的,比AStar的好)
* College Major :  大学的专业
* College Major Description :  这个不知道啥意思,随便填点东西就行……
* Degree Program :  学位(从上到下分别为:准学士,学士,硕士,博士,中学生)
* Graduation Year :  毕业年份
* Graduation Month :  毕业月份
* Clubs / Organizations :  组织(一般选None,可以按住Ctrl点鼠标多选)
Other Clubs / Organizations :  其它组织
* School:  学校(点Choose School选择学校,可以搜索,不过为啥shanghaijiaotong university才2个人注册?!)
* Show / hide my school:  显示/隐藏我的学校
GPA:  不懂的自己百度去……
GPA Scale:  同上
Resume:  简历
* How did you hear about TopCoder?:  你怎么知道的TC,如果选了“Member Referral”的话,需要填写那个人在TC的用户名(欢迎填写sqybi~)
* = required

点Submit,进入Confirm页面,确认信息。如果有误可以点Edit修改,否则点最下面的Confirm提交。
接下来进入Success,提示你已经发送一封邮件到你的邮箱中,你必须去点击里面的链接激活用户。激活之后就可以使用这个用户了。

登录
登录的方法一般都是使用Java Web Start。
在TopCoder主页( http://www.topcoder.com/tc )最下方有一段话,第一句是“Load the Arena as an Applet or as a Java Web Start Application”。点“Java Web Start Application”,就会自动下载登陆需要的文件(一个jnlp格式的文件,本机装了JRE/JDK才能打开)。经测试在IE7下这个链接似乎不管 用,在Firefox 3下正常。
然后运行下载下来的jnlp文件,就打开了TC客户端。第一次运行和有更新的时候会自动下载安装程序,等待即可,很快。
在我这里有时会提示“语法错误”,但没有任何影响,点“确定”就可以。启动可能会慢一些,耐心等待。
然后输入用户名密码,在Connection的地方选合适的登录方式(一般Direct就行,如果不行的话可以试试别的或者用AUTODETECT自动检测),在PROXY处设置代理,点GO登陆。这时可能还会提示语法错误,再确定就行,这个也没有什么影响。

界面
下面的图们来自原文,很经典,不打算改动了。请使用等宽字体浏览。
主界面:
———————————————————————–
|   Advertisements………….                                       |
———————————————————————–
| Main | Lobbies | Options | Practice Rooms | Active Contests | Help ||
———————————————————————–
|                                                 | Clock |           |
———————————————————————–
| Rating Key | Who’s here |                 Chat Area                 |
|     .      |            |                                           |
|     .      |            |                                           |
|     .      |            |                                           |
|     .      |            |                                           |
|     .      |            |                                           |
|————|            |                                           |
|  MESSAGES  |            |                                           |
|————|            |                                           |
|LEADER BOARD|            |                                           |
|————|            |                                           |
|            |            |                                           |
|            |            |——————————————-|
|            |            | >>_______________________________________ |
———————————————————————–
Advertisements 广告。
菜单项:
- 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: 聊天。

练习
在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。

比赛
每次比赛(除了1年两次的大赛)都需要在赛前3小时-5分钟之间登陆注册方可参加,注册需要在Active Contest菜单中,选择你要参加的那个比赛,再选择Register。注意比赛前5分钟注册停止,这时候如果没有注册就不能参赛了。而注册了没有打开 题目也视为没有参赛,rating不变动。
然后TopCoder开始根据每个人的rating分配room,一般每个room都有高手和菜鸟,只不过如果你的rating高,和高手分在一起的概率高一些(当然也不一定是这样,比如我上次就和yuhch大牛分在了一起……)
分配完成后,Active Contest菜单中Register一项变成Enter。选择后可以直接进入你被分配到的room。Active Contest菜单最下面还有一项暗色背景的Room子菜单,可以进入各个room溜达。
进入自己room的时候一般离开始只有3分钟左右,静一下心就可以直接开始比赛了。coding phase的过程与practice基本相同。注意每题的得分是和用的时间相关(见前面的计分规则),而时间是从你打开该题开始算的。所以一题做完后可以 不急着打开下一题,先放松一下。
75分钟的coding后是5分钟的intermission,这段时间是用来休息和聊天的。
然后就是最刺激的15分钟challenge phase,也就是通常说的cha人。打开summary,双击别人的各题Score可以打开那题的程序,如果觉得有错误就可以点左下的 Challenge然后输入你认为他会错的输入数据,如果输入数据合法那么系统会用标程的输出和这个程序的输出对比,如果出现不同则cha人成功。成功的 话你能得到50分,对方该题分数为0;而如果失败了,你会被减去25分。每个程序只能成功被cha一次,也就是说,如果有人cha掉了这个程序,你就不能 再次cha。但是一个人可以cha某个程序很多次,直到这个程序被cha掉或者你放弃。
Challenge结束后就是System Test。这个过程一般比较慢,可以先走开做其他事,过20分钟再回来看结果。System Test中的测试数据有两种:一种是出题者准备的测试数据,一种是成功cha掉别人的数据。所以,TC中很少出现有bug的程序能通过System Test的情况。
结果出来后再过一段时间,就可以看到一系列message,比如rating更新了,新的practice room建好了以及可以通过主页查看这次比赛的数据了。这时比赛就宣告结束。

注意事项
1.在TC主页( http://www.topcoder.com/tc )上可以看到Next SRM,这是下次SRM的时间。注意我们的时间与他们刚好相差12小时,因此若时间是7月9日9:00 PM的话,这里是7月10日9:00 AM。还有要注意的是美国有夏令时,非夏令时的时候,还要再加1小时,就是7月10日10:00 AM。
2.Practice Rooms里写的程序只要点SAVE就可以保存,下次login的时候还可以看到,但是比赛时候的程序必须Submit才可以在coding phase结束后保存(coding phase结束前还是只要SAVE就可以的)。
3.若想cha别人的程序,自己必须是正分(0分也不行),所以若没有一题有正确的程序但有很好的数据的话,随便交一道看上去正确的程序,然后在challenge的时候快下手,就可以赚到了。
4.客户端自带的编辑器只有基本的编辑功能和编译及测试功能,所以若觉得不方便的话可以使用parser和plugin,TC主页最下面有plugin的连接。每个plugin都有详细说明文档,这里不再赘述。
5.TC的FAQ: http://www.topcoder.com/?&t=support&c=index
6.最后一条,千万不要作弊,会有严重的后果。

SRM的输入输出
SRM是不用标准或文件输入和输出的,只要写一个类的一个成员函数。也就是说,你需要编写的并不是一个完整的程序,而是一个类。
输入是成员函数的参数,输出用return,所以经常需要STL中的vector和string。
因为TC的系统并不测试标准输出,所以标准输出可以当调试用。
下面以SRM 413 Div 2的1000分题目介绍程序的写法。
题目如下(选择不同的语言,题目描述会略有不同,本文以C++为例):

Problem Statement
NOTE: This problem statement contains subscripts that may not display properly if viewed outside of the applet.

Let’s consider an infinite sequence A defined as follows:
A0 = 1;
Ai = A[i/p] + A[i/q] for all i >= 1, where [x] denotes the floor function of x. (see Notes)
You will be given n, p and q. Return the n-th element of A (index is 0-based).

Definition
Class:
InfiniteSequence
Method:
calc
Parameters:
long long, int, int
Returns:
long long
Method signature:
long long calc(long long n, int p, int q)
(be sure your method is public)

Notes
- [x] denotes the floor function of x which returns the highest integer less than or equal to x. For example, [3.4] = 3, [0.6] = 0.

Constraints
- n will be between 0 and 10^12, inclusive.
- p and q will both be between 2 and 10^9, inclusive.

Examples
0)
0
2
3
Returns: 1

A[0] = 1.

1)
7
2
3
Returns: 7

A[0] = 1; A[1] = A[0] + A[0] = 2; A[2] = A[1] + A[0] = 2 + 1 = 3; A[3] = A[2] + A[1] = 3 + 2 = 5; A[7] = A[3] + A[2] = 5 + 3 = 8.

2)
10000000
3
3
Returns: 32768

3)
256
2
4
Returns: 89

4)
1
1000000
1000000
Returns: 2

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.

下面是我写的一个错误算法的程序,仅供参考格式用:

#include <string>
#include <vector>
class InfiniteSequence {
public:
long long calc(long long n, int p, int q) {
if (n == 0)
return 1;
else
return calc(n/p, p, q) + calc(n/q, p, q);
}
};

topcoder 插件

原帖地址:http://www.cppblog.com/a-young-man-jrs/archive/2009/05/22/85345.html

一般来说,我们安装这三个插件就够了:“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,再打开,现在打开一道题目看看,是不是很方便^_^

topcoder入门相关推荐

  1. TopCoder 入门教程 -- sqybi完善版

    本文根据经典的TC教程完善和改编. TopCoder:http://www.topcoder.com/ 基本规则 TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Mat ...

  2. TopCoder入门教程

    from http://hi.baidu.com/juart/blog/item/e0ef838b705eb9d4fd1f1039.html 基本规则 TopCoder的比赛类型很多,最常见的是周赛S ...

  3. TopCoder入门教程(转载)

    本文根据经典的TC教程完善和改编. TopCoder:http://www.topcoder.com/ 基本规则 TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Mat ...

  4. TC(SRM)和CF入门教程for ACMer[转载]

    一.TC基本介绍TC的网址www.topcoder.com/tc,我们一般提到TC的时候是特指其中的Single Round Match(SRM).SRM的规则总结起来就是一句话:75分钟做完3道难度 ...

  5. TC(SRM)和CF入门教程for ACMer

    一.TC基本介绍 TC的网址www.topcoder.com/tc,我们一般提到TC的时候是特指其中的Single Round Match(SRM). SRM的规则总结起来就是一句话:75分钟做完3道 ...

  6. [转载]TopCoder兼职赚钱入门(Part. 1)

    原文地址:[原创]TopCoder兼职赚钱入门(Part. 1)作者:汪昊成 最近找我问TC的朋友越来越多,于是就想写一个入门教程放在这里.对我来说,TC目前是总收入的一个重要组成部分,虽然不如工资多 ...

  7. TopCoder 详细规则入门(灰常实用)

    TopCoder 详细规则入门(灰常实用) 基本规则 TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High ...

  8. TopCoder兼职赚钱入门

    转自:http://blog.csdn.net/skai_csdn/article/details/6167334 最近找我问TC的朋友越来越多,于是就想写一个入门教程放在这里.对我来说,TC目前是总 ...

  9. TopCoder兼职赚钱入门(Part. 1)

    原文地址:[原创]TopCoder兼职赚钱入门(Part. 1) 作者:汪昊成 最近找我问TC的朋友越来越多,于是就想写一个入门教程放在这里.对我来说,TC目前是总收入的一个重要组成部分,虽然不如工资 ...

最新文章

  1. 业务系统性能优化——缓存
  2. (八)OpenStack---M版---双节点搭建---Cinder安装和配置
  3. Mysql与Sql Server查询数据库中表以及表字段
  4. paho.mqtt.embedded-c-master c语言版本架构
  5. 2020-11-22(树,森林和二叉树转换)
  6. 无锡技师学院计算机系,无锡技师学院
  7. Git 仓库设置记住密码
  8. 一秒点击手机屏幕次数_手机电池不耐用,都怪这些充电坏毛病
  9. Python语法特点如注释规则、代码缩进、编码规范等
  10. C语言基础教程读书笔记5.2.(第五章函数和存储类2)
  11. 对java android 中几种单例模式写法的总结
  12. Docker Mesos在生产环境的应用
  13. 计算机科学本质源自于数学思维,计算思维的特点、特征:形式化、程序化、机械化...
  14. 如何获取QQ邮箱授权码
  15. Notion笔记软件简介
  16. python画图分析问卷(含多选题)
  17. 魅族路由器(极速版)刷老毛子(padavad)固件-全网最详细教程
  18. Gartner2022应用安全测试魔力象限
  19. 解决div高度不自动增加的问题
  20. IDEA远程debug调试设置

热门文章

  1. 在CMD中登陆MySQL
  2. 广告位Banner设计(推广产品、游戏)
  3. 如何备份Linux系统磁盘
  4. stm32---端口复用和重映射
  5. Python为何会发展的如此之快?带你纵观全球Python趋势!
  6. windows下使用cmd命令文件批量重命名批量修改后缀重命名快捷键
  7. 计算机视觉这个专业怎么样?
  8. python(第九天)
  9. centos8在线文档编辑ONLYOFFICE安装
  10. 区块链游戏中的网络效应:内容仍为王