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 比赛环境的使用的更多相关文章

  1. 有关信息ACM/ICPC竞争环境GCC/G++叠插件研究记录的扩展

    0.起因 有时.DFS总是比BFS受人喜爱--毕竟DFS简单粗暴,更,而有些东西BFS不要启动,DFS它似乎是一个可行的选择-- 但是有一个问题,DFS默认直接写入到系统堆栈.系统堆栈和足够浅,此时O ...

  2. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  3. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  4. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. 记第五届山东省ACM程序设计比赛——遗憾并非遗憾

    记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室歇息了一 ...

  9. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  10. 训练报告 (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 ...

随机推荐

  1. 取余运算 C和python的区别

    今天看书发现python与C的负数取余运算结果不同,查资料理解. 取余运算的算法是相同的  r = a- n*(a/n)   n!=0 r是余数,a是被除数,n是除数.n不能为0,否则都会报错. 负数 ...

  2. 用其他音乐源帮帮网易云,Android听歌利器

    镜像文章 1.用其他音乐源帮帮网易云,Ubuntu听歌利器 2.用其他音乐源帮帮网易云,Windows听歌利器 1.TaiChi模块简介 TaiChi(太极)是一款免解锁,免root,就能够运行 Xp ...

  3. javaIO流(一)--File类的基本使用

    一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...

  4. SQL数据库—<2>数据库基本操作(CRUD)

    学习基本操作语句之前先简单了解数据库的基本数据类型: 数据类型:    二进制数据:以十六进制形式存储        固定长度:binary        可变长度:varbinary    字符数据 ...

  5. C#编程--第二天

    一.变量:变量先声明,后赋值,再使用. 语法:变量类型 变量名=值: 变量类型: 分为基本数据类型和引用类 基本数据类型:整型.浮点型.字符型.布尔型 引用类:字符串.日期时间.枚举类型.结构类型 i ...

  6. tf.add_to_collection,tf.get_collection简介

    tf.add_to_collection:把变量放入一个集合,把很多变量变成一个列表 tf.get_collection:从一个结合中取出全部变量,是一个列表 tf.add_n:把一个列表的东西都依次 ...

  7. 对于一键退出APP功能实现的技术探讨

    在Android的开发过程中,会经常存在“一键退出APP”的需求.经过一段时间的整理,其主要实现方式有以下几种. 本质:一键结束当前APP的所有activity&一键结束当前APP进程,两者合 ...

  8. go语言从例子开始之Example8.数组

    在 Go 中,数组 是一个固定长度的数列. package main import "fmt" func main() { 这里我们创建了一个数组 a 来存放刚好 5 个 int. ...

  9. Vue-cli使用prerender-spa-plugin插件预渲染和配置cdn

    参考:https://www.jianshu.com/p/6a4c0b281e7f 使用vue-cli打包项目一般为spa项目,众所周知单页面应用不利于SEO,有ssr和预渲染两种解决方案,这里我们只 ...

  10. 二、Redis启动、停止、Redis命令行的操作

    1.redis命令 redis执行了make install后,redis的课执行文件都会自动复制到 /usr/local/bin 目录 redis-server redis服务器 redis-cli ...