ACM算法比赛笔记

1.能把数据分类先分类(分而治之)。
2.散列表
3.十字表(先用两个数组存取每一行每一列的首地址,然后根据行列顺序进行插入)
4.堆栈(先进后出,用链表实现的时候新增加的元素应该作为链首)
5.队列(先进先出)
6.算法比赛允许打印算法,把提取各个位的数的程序,以及链表,以及位运算取操作的代码打出来。
7.关于在左边补0:%06d 0代表补的是0 6代表的是位宽 d代表的是类型。
8.关于控制输出小数位数%.nf或者%.nlf n代表小数后几位 f和lf是float类型和double类型
9.malloc(sizeof(int)*n):注意这里面的n最好用整形,用double程序释放内存的时候会出现问题。
10.使用C++里面的排序算法。
11.使用数组的时候多给数组增加一两个空间,因为有点题目是从1开始计数的。对于明确给出数组大小的,直接用数组大小吧(重要)
12.段错误,一般是数据类型不够容纳数据,或者数组溢出。
13.%.0lf这样就能让double以整形的方式输出了。(重要)
14.sort()定义在在头文件中 记住要加 using namespace std; (包左不包右)
sort使用方法,sort(首地址,首地址+数组长度,比较函数地址)//默认升序排序,参数3可以用来改成降序排序。
参数3的cmp函数
bool cmp(int a,int b){
//return a > b;//降序排序
return a < b;//升序排序
}
15.打印一份ascii码表
16.字母的ASCII码尽量用’a’ ‘A’这种代替,直接输入数值容易出错。
17.大小写字母的间隔是32
18.输入字符串建议使用gets函数 gets(char *pstr)
19.注意strchr返回的该元素所在位置的指针地址,用这个指针减去其首地址则可以得到Index.
20.C++二分查找函数同样在,依然需要using namespace std;
具体用法binary_search(首地址,首地址+数组长度,待查找的数,比较函数)
21.CodeBlocks在调试选项的调试窗口的监听选项可以打开变量监视窗口。
22.街区最短路径问题,写笔记
23.除0会报错
24.辗转相除法
25.设两个数是a,b最大公约数是p,最小公倍数是q
那么有这样的关系:ab=pq
所以q=ab/p
26.1不是素数
27.分治、回溯
28.注意运用逆向思维,把对有顺序数据的查找,把用来查找数据倒过来查找可能会加快运算效率。
29.1582年以后计算公式为:w=(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7直接得到当前日期的星期数(y为year m为month d为day)
30.要考虑数据类型够不够存
31.在scanf(“%d”,&T)后使用gets()要在gets之前用一个getchar把一个符号拿掉,要不然gets就会取到这个符号(scanf(“%s”))
32.注意输出结果一个结果都没有的时候。如果是两行的,第一行是结果数量,第二行是结果,如果结果数量是0那正确的输出方式是printf(“0\n\n”),用\n来代替没有的结果(PAT)
33.atoi函数可以把一个字符串变成数字 int atoi(char *); c/c++都可以用

34.求连续组合公式:num * (N-i)*(i+1) num是该组合某一位置的数,N是组合的长度,i是位置(以0开始).
例如:[1,3,2]
求这个数组的
[1][1,3][1,3,2]
[3][3,2]
[2]
的和。即可在for中使用sum += num * (N-i)*(i+1)求出结果,具体请看
我的PAT1049题。

-

35.c++的输出格式控制(头文件iomanip)
示例
控制小数位数cout< 输出结果为12.1
fixed是控制以小数形式输出,默认情况下是以指数形式输出的。
ACM算法比赛笔记_第1张图片
图片来源:http://c.biancheng.net/cpp/biancheng/view/116.html


35.当字符串需要按字典升序排序时用sort排序在cmp函数中直接用string1>string2就行了.

你可能感兴趣的:(ACM,PAT)