GPLT团体天梯赛 — 比赛技巧及知识点

版权声明:如有帮助,赞一个可好。邮箱:[email protected] https://blog.csdn.net/qq_40946921/article/details/88636096

编程环境:

提前适应比赛环境,避免比赛的时候出现突发情况。

题型分析:

L1:

大多题目考察逻辑思维,比较多的是排序问题(结构体+sort)

L2:

涉及到数据结构和一些经典算法,最多的是最短路径问题(dfs)(L2的题目如果你能确定属于什么题型,过程就很简单了)

L3:

在L2的基础上多了计算几何的题目(对于我这种高数渣来说,看到这样的题目基本上是不去考虑的)

比赛技巧:

1、由于PAT的题目测试数据较少,所以有些题目可以适当投机取巧

2、尽量一次写对,不要回头找bug。

3、为了方便函数调用,可以都用全局变量,但你得记住,这是个(坏习惯)

4、不确定数据多少的情况,不一定非要用动态数组,可以直接根据题目给的数据范围定义一个较大的数组(大小应大于题目所给的范围),一般情况下不会出现内存超限(数组大小别超过10^8,二维数组不能超过array[10000][10000])(坏习惯)

5、一般情况下答案错误很可能是漏了题目的关键信息。

6、格式错误是因为排版跟题目要求不同,可能会多空格或空行

7、段错误是由于非法访问才会导致的,所以一般情况下,出现段错误,是因为数组访问越界。

8、题目给的测试样例,一般是跟前面的测试点相对应的,最少得到这些测试点的分,其他的,适当取舍。

9、涉及到除法,需要考虑除数不能为0,一般会有一个测试点。

10、图论问题用深搜可以得到大部分的分

11、选取适当的结构(容器)可以让思路更清晰。

12、熟悉编译器的调试功能可以更快的找出bug。

必备知识:

数据结构与算法:(结构、算法来源于生活,理解、不要记模板)

1、树:二叉树的遍历方式,平衡二叉树的建树过程,根据两种遍历来建树

2、图:深搜,广(层)搜,并查集(推荐博客)

3、堆:堆结构,建堆过程(堆排序)。

4、链表:根据结点连接链表(一般通过结构体进行模拟)。

5、排序:熟悉快排和归并排序的排序过程

常用库、函数(不要脸的外挂)

1、C++字符串string,简单粗暴。

2、sort函数排序,自定义结构体比较方式(可重载<,或重载())。

3、STL标准库 list , vector,queue,stack,map,set 的各种操作。

4、类型转换:(可以通过sscanf,sprintf转换)

       char->int: -'0'                                    int->char: +'0';

       string->int:int stoi(string str)             int->string: string to_string(int i)  同理有stof,atoi(char*->int)

5、类型判断:(都可以自己写)

        比如 isdigit()判断为数字,反正你只要输入is,编译器后面会提示你有些什么函数,你翻译一下就知道功能了。

6、数组(容器)倒叙:

         (1)倒叙函数:void reverse(typename begin,typename end);

         (2)利用反向迭代器倒叙(构造 new string),以字符串str为例:

                      string s=string(str.rbegin(),str.rend())   or  s.assign(str.rbegin(),str.rend());

7、auto关键字——根据赋值自动推导数据类型(是不是突然知道了python不需用数据类型的秘密?=.=)

8、find函数:

string str;		//  string类成员函数:未找到返回string::npos
if (str.find("substr") != string::npos);
		//do something
set<int> st;
if (st.find(0) != st.end());   //set、map成员函数:未找到返回尾迭代器
		//do something
vector<int> vc;
if(find(vc.begin(), vc.end(), 0)!=vc.end());   //序列式容器可以通过algorithm库中find函数查找,未找到返回尾迭代器
		//do something

9、find_if、count、count_if,transform....(不常用、可以自己实现)

计算几何:

1、向量的各种性质:点乘,叉乘。

2、加法器原理:大数运算。

时间优化:(写好的代码有测试点运行超时,直接放弃,不要继续浪费时间)

1、如果出现运行超时第一时间思考是否是因为非法输入导致死循环。

2、尽量使用scanf,printf,而不使用cin,cout(C++的IO存在缓存(可取消));

3、不要重复创建临时变量(创建一次,后面赋值);

4、使用引用访问容器中的元素(遍历,排序);

5、使用unordered_map,unordered_set替换map,set可以提升效率;

6、一般图论问题都可以用深搜,但效率较低,容易超时,单源最短路径——Dijkstra,连通度、集合图——并查集;

7、图论问题,当数据量十分庞大(一般超过10^3个结点),使用map做邻接表效率很低,所以邻接表能用数组尽量用数组;

8、排序尽量使用sort对数组排序,而不要依赖与map和set的自动排序(map,set结构庞大);

9、一般递归算法都比较慢,深搜可以通过剪枝优化,并查集可以进行路径压缩提升效率。

 

猜你喜欢

转载自blog.csdn.net/qq_40946921/article/details/88636096