header

  • OJ评测时不会输出debug信息
  • 本地测试时使用#undef qdd屏蔽debug信息
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

#define ALL(x) begin(x), end(x)

#ifdef qdd
#define dbg(x...) do { cerr << #x << " = "; ringo.w(x); cerr << endl; } while (0)
#else
#define dbg(...)
#endif

struct Debug {
  template<class T, class... U> void w(T x, U... y) { w(x); cerr << ", "; w(y...); }
  template<class T> void w(T x) { cerr << x; }
  template<template<class...> class T, class t> void w(T<t> v) {
    int f = 1; cerr << '{';
    for (auto x : v) { if (!f) cerr << ", "; f = 0; w(x); }
    cerr << '}';
  }
} ringo;
// -----------------------------------------------------------------------------

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  return 0;
}

快速编译运行

#!/bin/bash
g++ $1.cpp -o $1 -O2 -std=gnu++20 -Wall -Dqdd && ./$1

CMakeLists.txt (for CLion)

add_compile_options(-O2 -std=gnu++20 -Wall -Dqdd)

file(GLOB problems RELATIVE ${CMAKE_CURRENT_LIST_DIR} *.cpp)
foreach(p ${problems})
    add_executable(${p} ${p})
endforeach()

CLion Shortcuts

Redo: Ctrl+Shift+Z
Replace: Ctrl+R

Multiple Cursors: Alt+Shift+Click
Move Lines: Ctrl+Shift+Up/Down
Block Comment: Ctrl+Shift+/
Format File: Ctrl+Alt+L

Run: Shift+F10
Debug: Shift+F9

Step Over: F8
Step Into: F7
Step Out: Shift+F8
Re-run: Ctrl+F5
Resume: F9

vimrc

syntax on
set nu
set cindent
set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set mouse=a

Fib

#include <iostream>
using ull = unsigned long long;
const ull N = 1e6;
// stack test
ull f(ull x) {
  static ull F[N] = {1, 1};
  return F[x] ? F[x] : F[x] = f(x - 1) + f(x - 2);
}
// speed test
// f(2e9 - 1) = 2697763845588227525
ull f(ull x) {
  ull a = 1, b = 1, c = 0;
  for (ull i = 2; i <= x; i++) {
    c = b;
    b = a;
    a = b + c;
  }
  return a;
}
int main() {
  std::cout << f(N - 1) << '\n';
  return 0;
}

热身赛要测的东西

  • 热身赛也要带板子
  • 如果现场机器的时间不正确,尝试调整
  • 打印
  • 提问
  • 代码长度限制
  • OJ返回值:CE(是否罚时,有没有CE信息), RE, TLE, MLE, PE/OLE
  • cerr会不会WA
  • Java环境
  • Python环境
  • 读整行
  • 栈大小 -O2
  • 输出格式问题(%lld, %Lf, 行末空格和回车)
  • 本地机器速度
  • 评测机速度
  • __int128
  • C++11(auto, range-for, lambda)
  • pb_ds

您好这边建议您再WA一次呢

读题

  • 确认题意 确认题意 确认题意(e.g. 模数? 要求字典序最小/最大? 严格递增/不严格?)
  • 读完题之后必须看一遍clarification

想题

  • 在纸上写下自己的观察
  • 复杂度很奇怪的题($n \log ^ 3 n, n \sqrt n \log n$)可以试一下暴力
  • 猜结论的题尽量打表验证

写题

  • 难写的题不要急着上机 先在纸上列个框架
  • 表示点/坐标不要用x1 y1 写xx yy
  • stack queue priority_queue取值前先判空
  • 排序时注意结构体的所有属性是不是考虑了
  • 想清楚到底是要multiset还是set
  • 预处理组合数 2倍上限
  • 数据结构注意数组大小(2倍,4倍,logn倍)
  • 二分答案估算一下上界 不要直接开1e18
  • 树链剖分/dfs 序,初始化或者询问不要忘记dfn
  • 确定不能用long long再开double ($\pm 2^{53} (9 \times 10^{15})$) / long double ($\pm 2^{64}$)
  • 输入数据1e6以上考虑读入优化
  • 空间够开数组 不要用map / set
  • 中途出答案也要读完

调题

  • 1LL « k
  • n m i j 打反 两重 i++
  • n m k 等定义成全局变量时注意是否有同名局部变量
  • cout « (a ? b : c) « …
  • while (!q.empty()) 不要忘记 pop
  • 欧拉降幂小心指数变成负数
  • 字符串数据集 01, 大 / 小写, 大小写 c-‘0’ c-‘A’ c-‘a’
  • 多次运行结果不同 / WA样例:检查一下初始化和数组越界
  • TLE先考虑能不能少个log 再考虑常数优化
  • 求最优解时不要忘记更新当前最优解
  • accumulate(a, a + n, 0) 数组是long long也会返回int
  • x ⊕ y 可能大于 max(x, y) (心态崩了)

交题

  • 看一遍clarification
  • 删除freopen和debug信息
  • 看一下数据范围,测一下边界
  • 检查一遍初始化 (如果有T Case, 必须有T>=2的样例)
  • 看一下有没有无解的情况 如果无解要输出什么
  • 构造题看一下是否要先输出ans.size()
  • 打印代码