ACM核武器

工欲善其事必先利其器,给大家介绍一下ACM里面常用的一些工具,平台,作为第一发福利。

本文适合刚学开始接触ACM的同学学习。帮助你们开阔一下视野。

各种强大的编辑器 + codeforces平台 + topcoder平台

有什么问题欢迎留言。

问题一:如果发现arena打不开

那么打开控制面板->java->常规->设置,点击删除文件

或者下载这个,解压后点击run.bat运行即可。

update:moj链接传错了,现在更新了

1:codeblocks   下载链接

网盘下载链接

codeblocks是各种现场赛基本都会有的IDE,属于最常用的IDE中的一种。

下载完成后打开codeblocks,file -> new -> project ->Console application->next->next->选择保存文件的目录然后取个名字

9

10

 

 

按F9编译即可。

如果嫌弃单调的白色背景以及字体啥的,这里有一个修改的方案

 

2:sublime text 下载链接

sublime 是一款文本编辑器,我一般采用文本编辑器+命令行编译的组合。

下载sublime后直接打开,在view里面的Syntax下配置一下你要编写的语言,我这里选择c++,然后就可以开始写代码了,写好代码按ctrl+s保存某目录下即可。

 

1

sublime有一些很方便的快捷键可供使用,具体可参考官网或者网上其他教程。

3:vim/gvim  下载链接

简单的说,vim是一款极其个性化的文本编辑器,你可以设置配色方案,自定义编译命令,预定义代码段等等。

这些设置都在安装目录下的一个vimrc的文件里面设置。 下面是我的vimrc,在现场赛,你只需要敲前五行就够了。

把_vimrc里面的东西先全部删了,然后把下面的vimrc贴进去。

46

 

打开vim,按f2,编辑器就会自动把头文件显示出来,避免你每次重复劳动。

F4编译,F5运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
set cindent autoindent number sts=4 sw=4 ts=4 et
set backspace=indent,eol,start
syntax on
map <F4> :!g++ -std=c++11 % -o %<<cr>
map <F5> :!%<<cr>
"linux 下把上面那行改成下面这一行
"map <F5> :!./%<<cr>
colorscheme evening
map <F6> :call JAVA()<CR>
func! JAVA()
exec "!javac %"
exec "!java %<"
endfunc
 
map <F2> :call SetTitle()<CR>
func SetTitle()
    let l = 0
    let l = l + 1 ¦ call setline(l,'/* **********************************************')
    let l = l + 1 ¦ call setline(l,'Auther: wuyiqi')
    let l = l + 1 ¦ call setline(l,'Created Time: '.strftime('%c'))
    let l = l + 1 ¦ call setline(l,'File Name   : '.expand('%'))
    let l = l + 1 ¦ call setline(l,'*********************************************** */')
    let l = l + 1 ¦ call setline(l, '#include <iostream>')
    let l = l + 1 ¦ call setline(l, '#include <fstream>')
    let l = l + 1 ¦ call setline(l, '#include <cstring>')
    let l = l + 1 ¦ call setline(l, '#include <climits>')
    let l = l + 1 ¦ call setline(l, '#include <deque>')
    let l = l + 1 ¦ call setline(l, '#include <cmath>')
    let l = l + 1 ¦ call setline(l, '#include <queue>')
    let l = l + 1 ¦ call setline(l, '#include <stack>')
    let l = l + 1 ¦ call setline(l, '#include <list>')
    let l = l + 1 ¦ call setline(l, '#include <map>')
    let l = l + 1 ¦ call setline(l, '#include <set>')
    let l = l + 1 ¦ call setline(l, '#include <utility>')
    let l = l + 1 ¦ call setline(l, '#include <sstream>')
    let l = l + 1 ¦ call setline(l, '#include <complex>')
    let l = l + 1 ¦ call setline(l, '#include <string>')
    let l = l + 1 ¦ call setline(l, '#include <vector>')
    let l = l + 1 ¦ call setline(l, '#include <cstdlib>')
    let l = l + 1 ¦ call setline(l, '#include <cstdio>')
    let l = l + 1 ¦ call setline(l, '#include <ctime>')
    let l = l + 1 ¦ call setline(l, '#include <bitset>')
    let l = l + 1 ¦ call setline(l, '#include <functional>')
    let l = l + 1 ¦ call setline(l, '#include <algorithm>')
endfunc

 

vim基本的用法可以参考这里 简明vim练级攻略

2

如果你是第一次使用vim,那vim可能会让你感觉很不适应,但是一旦你用熟练了之后,vim将会给你带来很大的方便。

4:编译。mingw-setup

由于下载安装啥的需要较长时间,这里我给出已经安装好的MINGW文件

下载好之后,解压到任何一个目录即可。

比如,我放到了D盘,因此,在D盘下会有这样一个文件目录 D:\MinGW\bin

3

 

 

我们看到了g++.exe,这个就是用来编译c/c++文件的编译器,你可以直接把cpp文件拖到这个exe上面进行编译,当然,更方便的做法是配置一下环境变量。

找到计算机,右键,属性,高级系统设置,环境变量,在下面找到PATH并打开

4

然后在末尾把刚才D:\MinGW\bin这个目录粘贴进路径里面。注意要用封号跟前面的路径隔开。

5

 

现在你可以按win+r 组合键打开一个控制台 输入cmd,打开

47

现在输入g++ -v,你可以看到g++编译器的版本号了。现在的g++编译器已经对全局产生了作用,而不仅仅是局限在一开始的D盘那个目录下了。

6

 

现在,我们采用cmd + sublime 以及 cmd + gvim的形式来编译我们的代码

7

 

cd命令是进入某个文件目录,比如这个E.cpp在桌面的新建文件夹下面,所以就一直cd过去就好了

g++ E.cpp -o E命令是编译E.cpp 文件产生E.exe可执行文件。

所以接下来输入E之后,就会自动调用E.exe,就可以输入a+b了。

假如发现错误,要修改,每次记得ctrl + s 先保存,然后再重新输入编译命令进行编译(也可以按“上”方向键来得到历史命令,避免重复输入编译命令)

8

vim下也是类似,不过个人感觉vim下开一个cmd辅助编译更加方便,因为你始终可以保持代码界面在你眼前,在linux下还可以避免来回切换代码界面与编译界面,方便注意力的集中

每次编译之前都别忘了保存。

 5: Topcoder比赛平台配置 JDK7下载(win32选择x86,win64选择x64)

JDK7网盘下载

arena下载

arena经常会更新,所以有时候版本落后了就要去上面那个地方下载

我下载好的 arena网盘下载

MOJ下载(包含了要用到的插件以及安装说明)

Arena指的就是topcoder竞技平台。

简介

Topcoder是比较老牌的程序设计竞赛组织。

topcoder上有很多比赛,我们最常做的就是SRM,一般一两周有一场,每场比赛三道题,由简单到难,分div1 与 div2两个地方,div1是高水平组,div2是菜鸟组,系统会根据你当前的rating分配你的组别,每场比赛之后都会更新你的rating,也就是你的分数。

先得去官网注册一个账号http://www.topcoder.com/

各种功能可以再这里的Algorithm 下面看看 http://community.topcoder.com/tc

安装好jdk后,下载arena,打开后我们看到了这个界面。

11

 

登录你刚才在官网注册的账号,就可以进入TC对战平台!

12

我们发现,每个人的handle有各种不同的颜色,这个颜色就代表你在这个平台上的级别,从绿色到蓝色到黄色再到红色最后再到target,比赛打得好了,会使你的的rating升高,rating升高到一定程度,你的颜色就会变换,很类似与游戏中的积累经验,升级。

现在,我们大概浏览一下这个平台。

首先是practice rooms,这里面记录了从topcoder平台上线以来的所有比赛,已经有很多年的题目累积了,平时没有比赛的时候我们可以在practice rooms里面磨练自己的技能

13

div2 的题目适合于菜鸟练习。我们随便进入一个div2的房间比如SRM 419div2

 

 

可以看到,一共有三道题目,在正式比赛的时候如果你打开一道题目,这道题目的分数就开始流失,一直到你提交代码,流失才停止,这个时候这道题目还剩下的分数就是你的得分了,当然,流失是有一个上限的,比如,250分的题最低分是75分。也就是最多流失175分。

我们点开第一个,也就是最简单的题来看下。

20

 

下面的区域就是你写代码的地方,当然,我们肯定是在本地写好正确的代码,然后贴到这里面,然后点击右下角的compile通过平台的编译,然后再点击submit来提交代码

我们来简单看一下这道题目。

题意就是 给你一个如图所示的图形,让你求这个图形的周长。

很简单的一道题!

Constraints里面告诉我们长方形的个数最多是50个。

Limits告诉我们的是时间限制以及内存限制,这些跟onlinejudge差不多。

唯一不同的是,这里面的题目不需要你输入输出东西,arena平台会给你一个Definition,来规定你的代码格式。

比如这题,你的代码格式就必须为(省去了若干头文件)

1
2
3
4
5
6
class ColumnDiagramPerimeter{
public:
    int getPerimiter(vector <int> a) {
 
    } 
};

 

 

如果你没有c++基础,那么先去了解一下c++类的知识,然后学习一下c++ 里面vector string等的用法,就足够到这里来用了。

现在,你只需要在int getPerimiter(vector <int> a)函数中实现你的代码逻辑,最后把答案返回就好了。然后,编译的话你可以将代码粘贴到下面的框里面,点击compile,compile成功后点击test可以进行样例的测试。

比如我实现好代码后,点击右下角的compile

代码在此

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <cmath>
#include <vector> //用到了vector,需要这个头文件
using namespace std; // c++ 语法
class ColumnDiagramPerimeter {
    int getPerimeter(vector<int> a) {
        int n = a.size();
        double result = 0;
        for(int i = 0; i < n; i++) {
            if(i == 0) {
                result += a[0] + 1 + 1;
            } else {
                result += abs(a[i]-a[i-1]) + 1 + 1;
            } 
        }
        result += a[n - 1 ];
        return result;
    }
};

 

26

显示运行成功。点击test

27

一组组选择数据进行测试。

 

都测试通过后如果感觉代码没什么问题就可以点击右下角的submit进行提交。

24

可以看到有一个分数,注意,这个分数只是说明你打开一道题目到你提交这段时间的一个损失的分数,比如这道题原来是250,现在得分是208,那么也就是说你损失了42分。比赛的时候就是比准确性,还有比速度。

现在是在练习房,所以我们可以直接测试一下自己提交的代码到底AC了没有。

25

点击Run System Test

28

可以看到,一共90个数据全部通过,250分的数字显示了绿色表示通过。这样,我们就Ac了这道题目了。

 

平台的一些插件的配置。

 

不知道大家注意到了没有,如果我们想在本地进行测试,需要自己写main函数,然后定义类,把样例的参数传进去,会变得很麻烦。

不过用插件就方便很多了。这里采用moj相关的插件,moj在上面的下载链接里面有。

下载下来之后里面有一个instructions,我翻译一下,然后给出一些关键截图。

Setup:

  1. 解压moj压缩文件,发现有三个jar文件
  2. 点击Options下面的Editors
  3. 点击Add,name一栏填CodeProcessor,Entrypoint填codeprocessor.EntryPoint,然后在路径里面把刚才那三个jar包选中。
    4.选择我们刚才新建好的Editors,然后点击configure ,在"Editor EntryPoint" 栏目下填写fileedit.EntryPoint.
    点击右边的configure , 把第一个勾 "Backup existing file then overwrite" 去掉. 第一行的路径你就填写一个想要保存代码的地方。插件安装完成后预定义的那些代码就会自动保存到这个目录下面。

在Code Template里面选择c++语言,然后把压缩包里面的那段特殊代码贴进去。然后点击save退出

  1. 回到 CodeProcessor configuration 窗口,点击Add,输入moj.moj,点击右边的verify测试一下插件是否安装成功。
    看到四个found就表示成功了。 然后一路保存退出即可。

29

30

31

32

33

34

42

36

37

38

40

41

 

现在我们打开一道题目再试试看,

43

我们发现右上角的editor变成了我们刚刚安装成功的codeprocessor插件,然后下面的框显示代码已经导入到本地目录了,我们再去本地目录看一下

QQ截图20150605191717

打开代码

44

我们发现各种头文件,class名字,方法,都已经写好了。

然后我们把刚才写好的代码贴进去,运行一下这个代码看看。

45

发现每组数据都会显示是否通过,很好很强大,完全省去了我们花在输入输出上面的时间。

 

5:还有一个平台就是codeforces平台 

codeforces上也有类似于topcoder那样的div1和div2,其实你就可以理解为topcoder的网页版本,当然,总会有一些不一样的功能。

codeforces题目较多,题目质量不如topcoder。

每场比赛有五道题。比赛时间为两个小时。

我们点开contests页面

48

发现主要有两个栏目,一个是未来或者正在进行的比赛,下面是过去的比赛,你可以点开过去的比赛,来练习以前的题目。

每场比赛都是要提前注册的,点击红色的register即可注册。

我们点开一场比赛的enter

49

如果你ac了一道题,就会显示绿色。右边的start virtual contest按钮提供了虚拟比赛功能,假如你错过了某场比赛,你可以在赛后参加虚拟比赛,比赛时候的排名会重新实时显示出来。

上方有一些按钮

50

room是你被分配到的房间,比赛的时候你在这个页面将相应的题目锁掉(意味着你不能再提交这道题了,即使你发现提交的代码有错误),然后点击room进去到你的房间里面,你就可以查看同一个房间内你锁掉的题目的别人的代码(双击分数即可查看代码)。如果你发现别人的代码是错的,就点击hack,输入相应的能够使得他的代码出错的数据。

topcoder比赛与codeforces比赛在比赛中提交的代码你都是不知道是不是真的AC了,在codeforces你会显示通过了pretest ,也就是很少的一些数据,在topcoder里面,你随便提交一个代码都能得到分数。但是两个平台都是一样,如果最终的数据测试中错了,你还是零分。

codeforces类似于online judge,不做过多介绍,主要目的在于让读者能知道有这样一个地方的存在。

 

ACM核武器》有10个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注