//学习要有过程,如有需要请从本系列最开始看起
0.1算法竞赛简述
算法竞赛是考察编程技术的一项专门竞赛,有csp,noi,acm等。近年来,算法竞赛已成为升学、找工作的“后门”、“捷径”。通常算法竞赛可以选择c、c++、java等语言。但是c++因为支持STL(其中有很多可以直接使用的算法和数据结构)且语言整体效率较高,变为最受人青睐的竞赛语言之一。因此以c++为媒介学习算法竞赛是不二选择。
但是算法竞赛如何判断程序的正误呢?其实,判断程序是否正确是一个黑盒测试,它并不关心程序本身是否正确,只是将测试数据输入给待测程序,并将此程序的输出结果与正确输出比较,以此来判断正误。通常一道题有多组测试数据,用来保证成绩的准确。
测试点信息
如上图示,这道题就有6个测试数据。中间的英文简写是这组测试数据的提示信息。它们的意义如下:
AC | 输出结果和正确数据相符,此测试点正确 |
WA | 输出结果和正确数据不符,此测试点错误 |
TLE | 程序运行时间超出规定运行时间,错误 |
RE | 遇到了一些奇怪的问题,如死循环,未return 0等 |
0.2算法学习的三个阶段
俗话说:“万事开头难。”
不过c++算法竞赛并非如此,相反它在最开始容易(第一阶段),中间因为学习资料匮乏,难度大等原因而十分困难,这时往往信心不足,容易放弃(第二阶段),而再继续努力学习,便会有很大收获,信心不断增强,进入到一段上升期(第三阶段)。
本系列最多帮你到第二阶段,而之后的内容则需要更专业的书籍,这里推荐《算法竞赛进阶指南》--李煜东。(未恰广告)
0.3算法竞赛学习方法
a.学习算法知识并在竞赛中大展拳脚,需要丰富的做题经验。刷题便是这么一种方法。你可以在自己熟悉的平台刷题,不过我最常用洛谷,链接在此:题目列表 - 洛谷
b.经常看大佬的代码,理解为什么要这么做,以及这么做会怎么样。
0.4一些需要注意的问题
a.不管是什么函数,一定要return,说不准会发生什么奇怪的问题。
b.如果懒可以加万能头文件“bits/stdc++.h”(几乎包含所有头文件),大部分的竞赛和OJ(在线判题网站),都支持这个头文件,有一个例外:poj。注意:一定要提前查看竞赛允不允许万能头,没有说的可以上百度查。
c.++i比i++速度快,a>>=2比a/2快,a<<=2比a*2快。详细介绍:C/C++中移位实现乘除法运算_jieniyimiao的博客-CSDN博客_c++移位实现乘法。在迫不得已时,可以提升一些效率(通常提升不了多少)
d.cin和cout效率非常低,在输入输出非常多时,建议用scanf和printf。
e.尽量用STL。会更简洁,而且有效率保证。
f.尽量不要用c头文件,如:
0.5如何骗分
由于判断程序是黑盒测试,因此可以骗分。比如在判断一个数是非质数时,你不会做,可以直接cout<<"yes",运气之神会给予你一半的分数。
更好的方式是(理想下,能拿到的分数):
int main(){ int n; cin>>n; if(n<1e6){//把你能解决的问题解决,不能解决的问题交给命运解决(1e6=1*10^6) //判断质数 } else{ cout<<"yes";//or cout<<"no" } return 0;}也可以用随机数rand()。
0.6编码技巧
用typedef,为原类型创建一个类型别名。用法:typedef 原类型 新类型;如:typedef long long ll;。可以直接使用:ll a=0;。编译器会把所有ll替换为long long。
下一次更新不知又是何时,希望大家学有所成。
点个赞再走嘛。
| 留言与评论(共有 0 条评论) “” |