持续更新。

  • 在循环中 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
  • 字符串用 getsgetline 忘记了回车。
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)
  • 二分边界没有考虑。
01-01 20:46
查看更多