赛事备忘录(legacy ver.)

· · 个人记录

系统相关

Linux

标准编译器版本为 g++ 9.3.0(见官网)。望周知。

推荐编译指令 g++ -std=c++14 -O2 -Wall -Wextra -Wconversion -Wshadow

请不要省略 -std=c++14

备选参数:

对拍脚本:

export CPPFLAGS='-std=c++14 -O2 -Wall -Wextra -Wconversion'
make xxx gen brute # 编译
if [[ $? -ne 0 ]]; then
  echo "Compile failed."
  return 1
fi

while [[ true ]]; do
  ./gen > 1.in
  ./brute < 1.in > 1.ans
  time ./xxx < 1.in > 1.out
  diff 1.ans 1.out # 比对输出
  if [[ $? -ne 0 ]]; then
    break
  fi
done

常用命令:

经测试,ub-san, -Wconversion 都不会对以下情况警告:

Windows

推荐编译指令:g++ -std=c++14 -O2 -Wall -Wextra -Wconversion -fno-ms-extensions

备选参数:

对拍脚本:

@echo off

:loop
  gen.exe > 1.in
  brute.exe < 1.in > 1.ans
  xxx.exe < 1.in > 1.out
  fc 1.ans 1.out
  if not errorlevel 1 goto loop
pause
goto loop

以及对应的 powershell 版本 (2024.8.16 更新)

while ($True) {
  ./gen > 1.in
  cat 1.in | ./brute > 1.ans
  cat 1.in | ./xxx > 1.out
  if ($(diff $(cat 1.out) $(cat 1.ans)) -ne $None) {
    break;
  }
}

常用命令:

不建议 使用 Dev-c++。可以使用功能、界面相近的 Code::Blocks 替代。

语言相关

语言 feature

class A {
  static int a;
};
int A::a = 1; // 如果没有这一行,会 CE:undefined reference to `A::a'
a[read()] = read(); // 在 c++17 之前是 UB