ACM集训第二三天感悟

需要注意数据的范围,比如double和int等精度和范围

打表法:先用暴力法吧全部情况的答案打到一个文件里面,然后吧文件里的数据放到一个数组里面,最后的代码就是一个输出数组,可以让半个小时的程序只需要几毫秒就成功AC

记忆化搜索,用一个全局多维的数组全部初始化为0,然后在递归每次给一个数组的值赋值,以后要是需要求这个值的话就可以直接输出(判断它是否为0,如果不为0就直接输出),可以剩下很多时间和内存

深度搜索法,rbk(x,y),代表选了的个数和选的下表,如果需要保证全排那么递归的函数为(x+1,y+1),一般不需要y+1这种情况就会下一次深搜的时候下面的所有数据都要全部判断

递归从上往下需要一个跳出条件和递归条件(记忆化搜索)

递推从下往上,需要回溯(深搜)

范围内素数的判断可以跳过偶数位,可优化算法节省时间和空间

当输出结果数较大的时候可能会出现科学计数法这时用fixed来解除科学计数法的输出方式再用set precision(n)限制输出的小数点位数,但是setprecision需要#include作为头文件

memset(a,0,sizeof(a))需要头文件#include作用是将数组内的所有数初始化为0,第一个参数为指针,一般为数组的开头即数组名

string类的对象可用+ - == 符号进行操作,也可用reserve()函数进行反转操作
string类对象想要进行全部字幕大写或者全部字幕小写可用transform(s.begin(),s.end(),s.begin(),::toupper)//大写
transform(s.begin(),s.end(),s.begin(),::tolower)//小写

再写计算器改良的时候需要注意特殊情况比如C++中0除以一个负数结果输出为-0.0这时需要加以判断
还需要注意+x -x的情况前面没有数字但是实际上有1和-1,这种情况也需要判断,还需要注意判断未知数的时候看是否为头和尾,他的前面是否为=,这些均为特殊情况

你可能感兴趣的:(ACM实训)