Skip to content

查看源代码:
oi-warning.md

---
title: 疯狂进食(持续更新)
createTime: 2024/12/11
categories:
    - IT
tags:
    - OI
    - OI-note
---

在这里存点我的黑历史((

## inline

```cpp
inline func(...){
    ...
}
```

在本地能过,但是交上去会爆零。

## 加强

写完[蛇蛇放置](https://www.luogu.com.cn/problem/U511581)的 std 之后发现跑得太快了,于是增大了一下数据范围。

但是我没改 std。

> 推销:**来做蛇蛇放置喵,来做蛇蛇放置谢谢喵**

## size

```cpp
int size[maxn];
```

您的 $\color{#cc0}\text{CE}$ 好帮手。

## 字符

```cpp
char c;
cin >> c;
int a = c-0;
```

导致我的 NOIP 1h 没了的罪魁祸首。

## move

```cpp
void move(bool x){
    ...
}

...

move(xxx);
```

`std::move`:亻尔女子。

:::tip C++ Reference

```cpp
template < class T >
constexpr std::remove_reference_t<T>&& move( T&& t ) noexcept;
```

:::

## 转置

> 第二行 $n$ 个整数 $A_i$。
> 第三行 $n$ 个整数 $B_i$。

```cpp
for (int i=1; i<=n; i++){
    cin >> a[i] >> b[i];
}
```

转置领域大神!

## 行列不分

这次是[摸个鱼鱼](https://www.luogu.com.cn/problem/U514748) checker 出锅,满屏 $\color{#0E1D69}\text{UKE}$。

```cpp
n = inf.readInt();
m = inf.readInt();
k = inf.readInt();
for (int i=1; i<=n; i++){
    for (int j=1; j<=n; j++){
        a[i][j] = inf.readInt();
    }
}
```

## 有些{话|变量}明明{想|生成}好了却无法{说出口|输出}

```python
k = strong_rand(K, 1) if K>2 else K
test_data.input_writeln(n, m)
```

让我们恭喜[摸个鱼鱼](https://www.luogu.com.cn/problem/U514748)拿下双杀。

## n 有双重人格

```cpp
int n;
...
int main(){
  int n;
  cin >> n;
}
```

## 双重循环

```cpp
inline void init_st(){
    for (int i=1; i<=n; i++){
        for (int j=1; i+(1<<j)-1<=n; j++){
            st[i][j] = gcd(st[i][j-1], st[i+(1<<(j-1))][j-1]);
        }
    }
}
```

ST 表/区间 DP 笑传之初创备。

## 左右不分

```cpp
int len = l - r + 1;
```

我已无法理解此人。

## 自动取整

```cpp
int dis = sqrt(x*x + y*y);
```

我将无情地割舍一切(丢掉小数部分)

## 广义滑动窗口

```cpp
for (int i=1; i<=i+n; i++)
```

小明永远地追逐着小红,
小红只是{回以|return}
$\color{red} 3221225477$. {.inline}

## 变量名灾难

```cpp
int maxa = -1, maxi=-1;
for (int i=1; i<=n; i++){
    if (ans[i] > maxi){
        maxa = ans[i];
        maxi = i;
    }
}
```

~~居然能拿 20 分,这数据也是没谁了。~~

## 维度错乱

众所周知,在数组中一般采用如下坐标系:

```
.-------->j
|
|
|
v
i
```

然而某人把它和计算机图形学上常用的坐标系

```
.-------->x
|
|
|
v
y
```
混淆了。

## 史上最奇特的 TLE 方法

每次清空一个长度为 $\sum n$ 的数组,导致复杂度退化为 $O(T\sum n)$,光荣 $\color{#0E1D69}\text{TLE}$.

## 符号、作用域与连锁反应

```cpp
int l=1; r=S/(a*b);
```

本来会报错的,但是我又有一个叫做 `r` 的全局变量……

RE: 从 $0$ 分开始的 OI 生活

## 文件 IO

```cpp
freopen("in.txt", "r", stdin);
```

没删,甚至还 AC 了两个点,很有迷惑性,调了 10min,智商--;

## 氧气是剧毒的

```cpp
int n, m;
scanf("%lld%lld", &n, &m);
cout << n << m;
return 0;  // <--

canvas cv;
// 里面有一个大数组
```

栈空间是在函数运行开始时分配的。如果是 `-O0` 就会爆栈。但是由于 `-O1` 以上的优化等级不会编译死代码,`return 0` 后面的就被忽略了。

~~这个故事告诉我们氧气是剧毒的。~~

## UB 醉氧

```cpp
inline int eval(const bool is_odd, const vector<int> &co, int rt) {
    int val = -1;
    for (int u: co) {
        if (val!=-1 && w[u]!=-1 && val!=w[u]) {
            return 0;
        }
        
        val = w[u];
        
        if (is_odd && val > 0) {
            return 0;
        }
    }
    
    if (!is_odd && val==-1) {
        return V;
    }
}
```

当 $\texttt{is\_odd}=1, \texttt{val}=-1$ 时却出现了 $(\texttt{!is\_odd \&\& va1==-1}) = 1$,为什么呢?

关掉 O2 之后发现结果不一样了,最后在成堆的警告中发现这个函数没返回值,UB 了。

这个故事告诉我们 UB 会醉氧。

以及告诉我们别嫌 warning 长,要一个一个改。

## 未完待续(希望别续)