header

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

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

#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(0);

    return 0;
}

快速编译运行

#!/bin/bash
g++ $1.cpp -o $1 -O2 -Wall -Dqdd && time ./$1

CMakeLists.txt (for CLion)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Dqdd")

macro(go A)
    add_executable(${A} ${A}.cpp)
endmacro()

go(A)
go(B)
go(C)

vimrc

syntax on
set nu
set cindent
set tabstop=4
set shiftwidth=4
set softtabstop=4
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 / long double
  • 输入数据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 再考虑常数优化
  • 求最优解时不要忘记更新当前最优解

交题

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

标签: none

添加新评论