持续更新。
- 在循环中 i 和 j 的搞混了。
for (int i = 1; i <= n; i++)
for (int j = 1; j <=m; i++) //j++
scanf("%d", &a[i][j]);
- 忘记
vector
的下标从零开始。
vector <int> v;
for (int i = 1; i <= v.size(); i++) // for (int i = 0; i < v.size(); i++)
printf("%d ", v[i]);
- 结构体使用了
(Type){}
,但是结构体定义的顺序不对。
struct node{
int l, r;
int pos //正确的是pos, l, r
};
priority_queue <node> q;
q.push((node){pos, l ,r});
- 多组数据没有初始化。
bool vis[N];
int T;
while (T--){
//此处应该写memset(vis, 0, sizeof(vis));
dfs(1);
}
- 没有考虑数组下标为负数的情况。
dp[i] += dp[i-j] * j; // j可能大于i
- 位运算引起歧义,一定要多加括号。
int a, b, c, k;
if (a * b << c <= k); //此处改为 if (a * (b << c) <= k)
a = a >> 1 + 2; // 改为 (a >> 1) + 2
vector
等的成员函数.size()
返回的是无符号类型,减去一会变成正无穷。
for (int i = 0; i < v.size() - 1; i++) //改为 int(v.size()) - 1
printf("%d ",v[i]);
- 忘记
string
类型下标从 0 开始。
string s;;
for (int i = 1; i <= s.size(); i++)
num *= 10, num += s[i] - '0';
- 题目条件有除法没有移项造成精度损失。
double a, b, c;
if (a / b > c) puts("YES"); // 改为 if (a > b * c)
- 使用
long long
,输出没有打%lld
。
long long a;
printf("%d", a);
- 输入没加取地址符或输出加了取地址符。
int a;
scanf("%d", a); //&a
printf("%d\n", &a) //a
- 输入或输出少写
%d
。
int n, m, k;
scanf("%d%d", &n, &m)); //改为%d%d%d
- 全局变量与局部变量进行多次定义。
int a[N];
int a; cin >> a;
- INF 开小
const int INF = 1e9; //应该是(1<<30)
- 调试语句不明显,忘记删除。
cout << a.rk << " " << a.name <<endl;// 最好加上一个显眼的标志(字符串)
- 没有认真审题。
maxn
开大或minn
开小。
maxn = 0x3f3f3f3f;
minn = 0; //这个比较常见
- 队列、栈等数据结构不断取出栈顶忘记为空。
queue <int> q;
int a = q.top() //如果此时队列为空会RE
- 递归、搜索等没有边界。
void jc(int n){
return jc(n - 1) * n; //无限递归,需要特判 j == 1
}
- 全排列函数
next_permutation()
使用前没有排序。
int a[N];
// 加上sort(a + 1, a + n + 1);
do{
}next_permuntation(a + 1, a + n +1);
- 把 n 与 m 等变量弄混。
sort(a + 1, a + m + 1); //改为a + n +1
for(int i = 1; i <= m; i++); // 改为 i <= n
- 字符串用
gets
和getline
忘记了回车。
char a[N]; string s;
gets(a); // 加上 getchar(); 吃掉 \n
getline(cin, s);
- 能不用 char 数组下标从 1 开始就不用。
char s[N];
scanf("%s", s+1);
int len = stelen(s);//容易忘记是 strlen(s+1)
- 二分边界没有考虑。