1.使用vector之前,一定要先清空
.clear();
2.对于int转float或double,需要*1.0,否则还会是整除,出现错误
4.程序错误的一般原因:
1)内存越界(查找数组(负数)下标)
具体的代码形式可为数组下标越界和指针移动越界,
在操作一个数组或是指针之前,要明确其边界范围,
不应访问不属于系统分配的内存区域。
2)指针为空
3)循环无限(注意循环条件)
5.循环条件一般是需要同时满足
如果遇到时间要求的题目,可以先计算结果,然后保存到数组中,比如(素数回文)不会快速算,就打表再保存到
数组中.(!!水平低,没办法)
π的值: 3.141592653589793238462643383279502884197169399375105820974944592307816
e的值为: 2.7182818284590452353602874713526624977572470936999595749669676277240766303535
用了#include
深度优先搜索:
<1> 注意递归结束条件.
<2> 注意判断条件.
#include
cin和scanf()不要同时用
深度优先搜索,如果地图很大,可能需要剪树.
链表的循环条件一般是最后面呢个结点的->next;
对于一个类型相同的函数,为了避免混淆,最好在函数前面写前缀.
memset对浮点型不适合,直接用循环处理
遇事不决先打表,然后发现规律
int 大小: [-2^312^31-1]
多次提交不过,很可能是题目意思搞错
比赛一定要互相对题意
注意使用模板的时候,要修改模板你的数据范围,不要越界
在满足复杂度的前提下,写容易写的代码,避免错误
注意数据范围,有时候会出现数组翻倍等现象,别越界了
在每次提交前一定要测试一遍测试数据
对于测试数据,一定要测试特殊情况(极大,极小,0,1等)
编译错误,各种编译错误,注意g++和c++还是有些区别的
就是代码有问题,有些平台不能用万能头文件:#include
int
与测试数据不一致,一般算法错误
另外如果用了std::ios::sync_with_stdio(false);加速后,不能cin,cout和scanf混用,否则有可能报错
要注意数值范围,函数范围.比如pow()如果比int大,要在前面加long long
有些数据比较强的题目,long long也会越界
有多组输入时要注意初始化数组,字符串,标记
有时候要注意特殊卡点,常见的有0和1.
注意标点的应用, 把 = 写成 == ,不会提示语法错误,会直接wa
有max标记,就要初始化极小,有min标记,就要初始化极大
一切sum都用ll,相乘的用ll
对于(cc-x)%mod的式子,结果要: ((cc)%mod-x+mod)%mod
输出程序走不出来,一般是无限循环
测试数据与数据结构值一样,一般是换行,空格之类的错误
如果输入输入很多,一定不要同cin,和cout.
程序内出现无限循环,走不出来
算法效率太低,不能在规定的时间内运行出结果
如果输入输出太大,一般只能用scanf,有些题目scanf(),printf()的速度都不够
会用
一般是程序崩溃
指针越界,数组越界,访问过大,或者访问负数下标
出现除零的情况
相乘太大,超过long long,溢出,要注意相乘数大小,可以把相乘转化为相除
使用已经释放的空间
数组开的太大,一般在函数里面开数组大约不能超过约20多w,否则崩溃
7.Memory Limit Exceeded(爆内存)
使用的内存超过程序限制,爆内存,一般是算法效率不够,开多了数组,指针.指针用了不释放
一般现在的比赛不会超内存,目前新比赛起码256m起步,hduoj和poj上很多题目都是30000k的,完全比不了
用之类的来加速
#include
#define lowbit(x) (x)&(-x)
#define pb push_back
#define mod 1000000007
#define ll long long
using namespace std;
inline bool read(int&x)
{
char c=getchar();
while((c<'0'||c>'9')&&~c)c=getchar();
if(c==-1)return 0;x=0;
for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
return 1;
}
inline bool read(ll&x)
{
char c=getchar();
while((c<'0'||c>'9')&&~c)c=getchar();
if(c==-1)return 0;x=0;
for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';
return 1;
}
inline bool read(char*s)
{
char c=getchar();
while((c<=' '||c>126)&&~c)c=getchar();
if(c==-1)return 0;
for(;c>' '&&c<=126;c=getchar())*(s++)=c;
*s=0;return 1;
}
int main()
{
//freopen("E:/in.txt","r",stdin);
//freopen("E:/out.txt","w",stdout);
return 0;
}
__int 128 的输入和输出,还是蛮好用的,如果数据范围不是非常大,可以节省不少时间
代码:
输入:
inline void read(__int128 &X)
{
X = 0;
int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
if (w) X = -X;
}
输出:
void print(__int128 x)
{
if (!x) return ;
if (x < 0) putchar('-'),x = -x;
print(x / 10);
putchar(x % 10 + '0');
}
头文件:
#include
#include
#include
#include
#include
#include
#include
#include
#include