ACM-ICPC 比赛环境的使用
ACM-ICPC 现场赛不同的赛站可能比赛环境不同,不过一般都是 Ubuntu 系统。附带的软件可能略有不同,可能会有使用习惯的差异导致效率下降或者无法运行代码,但是在终端下编译运行代码都是相同的。本篇博客介绍的是在终端下如何编辑代码、编译代码、运行代码以及调试代码。
编辑代码
当然是 vim 神器了。vim 的学习曲线挺大的,不过掌握基本的使用还是没有问题的,可能一开始离开鼠标效率会不高,但是一旦熟悉了以后效率可能会比使用鼠标高。
这里介绍 vim 最基本的用法。
首先新建文件:
vim test.cpp
文件保存在当前目录下。
后缀名是你想要的语言:.c .cpp .java .py
vim 有三种模式:普通模式 (normal)、插入模式 (insert)、可视模式 (visual)。
一开始进入的就是普通模式,或者按下 Esc
键进入普通模式。普通模式就是替代其他编辑器日常使用鼠标的部分。
普通模式下一般输入命令,所以不能乱按键盘(基本每个键都是命令)。
普通模式下可以用 hjkl
代替方向键,分别代表左下上右 (当然还是直接用方向键最舒服)。
普通模式下按 u
可以撤销,撤销上一次对文本的更改。按 x
可以删除光标后的一个字符,按 dd
可以删除整行。
普通模式下输入 :
最下方就会输出命令框,可以输入命令。最常用的当然是保存和退出。保存是 :w
,退出是 :q
,强制退出是 q!
(也就是修改后未保存直接退出))。可以叠加命令,也就是保存退出是 :wq
。还可以增加一些配置,比如显示行号::set number
。但是这样配置退出 vim 后就没了。配置信息可以写在名为 .vimrc 的文件中保存下来。一般保存在 ~/ 目录下 (用户目录),只对某个用户有效。全局配置一般在 /etc/vim/vimrc 或者 /etc/vimrc,对所有用户有效。
这里推荐这篇 模板 的 vim 配置。
普通模式按下 i
键进入插入模式,插入模式下可以正常编辑代码。
普通模式按下 v
键进入可视模式,可以批量选择代码,最常用的就是批量选择代码,然后按 d
删除。
编译代码与运行代码
C
C语言直接使用 gcc 编译就行。
假设要编译的文件名为 test.c
最常用的语句就是:
gcc test.c -o test
最后 test 为可执行程序的文件名,如果不加默认生成 a.out。
加个 -g
可以调试。
gcc test.c -o test -g
加 -Wall
输出所有警告信息。
加 -O2
开 O2 优化
gcc 其他参数挺多的,不过比赛中不常用。
运行的话直接 ./test
就可以了。
假设同一目录下有 test.in。
可以使用如下命令对输入重定向:
./test < ./test.in
也可以对输出重定向:
./test > ./test.out
输出内容存入文件 test.out。
可以一起使用:
./test < ./test.in > ./test.out
这样就不用加什么 freopen
之类的文件操作函数了,有时候提交时忘了删除就直接 WA 了。
C++
C++ 使用 g++ 编译。与 gcc 很相似。
假设要编译的文件名为 test.cpp
g++ test.cpp -o test
-g
、-Wall
、-O2
参数作用与 gcc 一样。
运行的话与 C语言部分一样。
Java
假设要编译的文件为 test.java (注意主类的名字要和文件名一致)
javac test.java
在同一目录下会生成 test.class。
然后用以下命令运行:
java test
注意不要加 .class
Python
Python 是解释型语言,直接运行就可以了。
假设要运行的文件为 test.py
用 Python2 运行:
python test.py
用 Python3 运行:
python3 test.py
当然目前很多赛站不支持 Python
。
如果想要更方便的编译运行,可以写一些 Shell 脚本。
调试代码
这里只讲用 gdb 调试 C++ 程序。
前提是编译时加了 -g
参数。
假设要调试的代码为 test.cpp
先编译:
g++ test.cpp -o test -g
运行一下命令进入调试:
gdb test
输入 l
显示主函数所在的代码部分。
l
后面可以加数字,表示显示的行号。
也可以加函数名。
输入 b 10
在第 10 行设置断点。
输入 delete 10
删除第 10 行的断点。
输入 r
运行。
输入 n
单步跟踪。
输入 c
执行到下一个断点处。
输入 print x
输出 x 变量的值。
输入 display x
每次单步执行都输出 x 变量的值。
输入 q
退出 gdb。
还可以用 gdb -tui
进入更好看的 gdb。
ACM-ICPC 比赛环境的使用的更多相关文章
- 有关信息ACM/ICPC竞争环境GCC/G++叠插件研究记录的扩展
0.起因 有时.DFS总是比BFS受人喜爱--毕竟DFS简单粗暴,更,而有些东西BFS不要启动,DFS它似乎是一个可行的选择-- 但是有一个问题,DFS默认直接写入到系统堆栈.系统堆栈和足够浅,此时O ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- 【转】ACM/ICPC生涯总结暨退役宣言—alpc55
转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- 记第五届山东省ACM程序设计比赛——遗憾并非遗憾
记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室歇息了一 ...
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- 训练报告 (2014-2015) 2014, Samara SAU ACM ICPC Quarterfinal Qualification Contest
Solved A Gym 100488A Yet Another Goat in the Garden B Gym 100488B Impossible to Guess Solved C Gym ...
随机推荐
- javascript中call(),apply()用法
//上下文模式:根据用户传递的参数产生不同的结果 //实现方式:call/apply:这两个都是定义在Function.prototype.call——>目的:任何函数都可以访问到call/ ...
- pandas相关操作
import pandas as pd import numpy as np ''' 一.创建df 1.定义df :传递字典 1.1每一列的名称作为键 每个键都有一个数组作为值[key:数组] 1.2 ...
- Dubbo 系列(07-2)集群容错 - 服务路由
目录 Dubbo 系列(07-2)集群容错 - 服务路由 1. 背景介绍 1.1 继承体系 1.2 SPI 2. 源码分析 2.1 创建路由规则 2.2 RouteChain 2.3 条件路由 Dub ...
- String的replace导致内存溢出
从一次内存溢出来看JDK的String应该怎么用 背景 JDK在String类中给我们提供的API,replace是个使用频率很高的的方法.因为他可以对字符串内容进行替换,只需要输入替换字符串和被替换 ...
- css颜色单位
/* 用颜色的单词表示不同的颜色:red, green, blue等等 */ p { background-color: red; } /* 用rgb三元色表示,rgb => red, gree ...
- json_value.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticReleas
注意版本的提示mD mt 注意动态mfc 还是静态mfc
- css3--css3模块
CSS3被拆分为"模块".旧规范已拆分成小块,还增加了新的. 一些最重要CSS3模块如下: 1.选择器(.基本选择器,层次选择器,伪类选择器,伪元素,属性选择器,通配符) 2.盒模 ...
- window常见操作
cmd查看进程命令 nestat -aon|findstr "端口" 杀进程: taskkill /f /pid 端口号 /f参数强制杀进程 通过注册表删除桌面图标 cmd re ...
- 表结构转excel
SELECTCOLUMN_NAME 列名,COLUMN_TYPE 数据类型,DATA_TYPE 字段类型,CHARACTER_MAXIMUM_LENGTH 长度,IS_NULLABLE 是否为空,CO ...
- MD5文件去重
//计算文件的MD5码 private string getMD5Hash(string pathName) { string strResult = ""; string str ...