2018年11月

header

  • OJ评测时不会输出debug信息
  • 本地测试时使用#undef qdd屏蔽debug信息
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
// #pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pii = pair<int, int>;

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

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

struct Debug {
    void w(string s)
    { cerr << '"' << s << '"'; }

    template<class T> void w(T x)
    { cerr << x; }

    template<class T1, class T2> void w(pair<T1, T2> p)
    { cerr << '('; w(p.first); cerr << ", "; w(p.second); cerr << ')'; }

    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 << '}'; }

    template<class T1, class T2> void w(map<T1, T2> v)
    { int f = 1; cerr << '{'; for (auto x : v) { if (!f) cerr << ", "; f = 0; w(x); } cerr << '}'; }

    template<class T> void w(T *s, T *t)
    { w(vector<T>(s, t)); }
} ringo;
// -----------------------------------------------------------------------------

快速编译运行

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

vimrc

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

热身赛要测的东西

  • 热身赛也要带板子
  • 打印
  • 提问
  • 代码长度限制
  • 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
  • 提交之前必须看一遍clarification
  • 提交之前注意删除freopen和debug信息
  • 提交之前看一下数据范围,测一下边界
  • 提交之前检查一遍初始化 (如果有T Case, 必须有T>=2的样例)
  • 提交之前看一下有没有无解的情况 如果无解要输出什么
  • 交完每道题都要打印
  • 1LL << k
  • n m i j 打反 两重 i++
  • n m k 等定义成全局变量时注意是否有同名局部变量
  • cout << (a ? b : c) << ...
  • 表示点/坐标不要用x1 y1 写xx yy
  • stack queue priority_queue取值前先判空
  • while (!q.empty()) 不要忘记 pop
  • 排序时注意结构体的所有属性是不是考虑了
  • 想清楚到底是要multiset还是set
  • 预处理组合数 2倍上限
  • 欧拉降幂小心指数变成负数
  • 数据结构注意数组大小(2倍,4倍,logn倍)
  • 二分答案估算一下上界 不要直接开1e18
  • 树链剖分/dfs 序,初始化或者询问不要忘记dfn
  • 字符串数据集 01, 大 / 小写, 大小写 c-'0' c-'A' c-'a'
  • 确定不能用long long再开double / long double
  • 输入数据1e6以上考虑读入优化
  • 空间够开数组 不要用map / set
  • TLE先考虑能不能少个log 再考虑常数优化
  • 复杂度很奇怪的题($n \log ^ 3 n, n \sqrt n \log n$)可以试一下暴力
  • 多次运行结果不同 / WA样例:检查一下初始化和数组越界
  • 求最优解时不要忘记更新当前最优解
  • 图论题注意图不连通的问题
  • 猜结论的题尽量打表验证
  • 构造题提交前看一下是否要先输出ans.size()
  • 交互题不要浪费询问次数
  • 中途出答案也要读完