平台库(Platform) 将平台特定的基础功能等统一一个接口,避免代码直接访问平台功能,实现跨平台。 宏定义 构建目标 PLATFORM_NAME 包含当前目标平台的名称,如 Windows 或 Linux 等,应由构建工具设置,缺省为 Unknown 。 PLATFORM_XXX XXX 为目标平台的名称(全大写),为当前目标平台时定义为 1 ,反之为 0 。 BUILD_TYPE 包含当前目标构建类型的名称,如 Debug 或 Release 等,应由构建工具设置,缺省为 Unknown

Read More

加锁的原则 规则10.1 多线程 进程并行访问共享资源时 一定要加锁保护 共享资源包括全局变量,静态变量,共享内存,文件等。 建议封装像智能指针一样的对象对锁进行管理,比如我们就封装了一个 auto_lock ,在构造时申请锁,析构中释放锁,保证不会忘记解锁。 规则10.2 锁的职责单一 每个锁只锁一个唯一共享资源,这样,才能保证锁应用的单一,也能更好的确保加锁的范围尽 量小。对于共享全局资源,应该根据实际需要,每类或每个资源,有一把锁。这样,这把锁只锁对这个资源访问的代码,通常这样的代码都会是

Read More

一键跳转至题目 题目描述 机器上有 n 个需要处理的任务,它们构成了一个序列。这些任务被标号为 1 到 n,因此序列的排列为 1 , 2 , 3 \cdots n。这 n 个任务被分成若干批,每批包含相邻的若干任务。从时刻 0 开始,这些任务被分批加工,第 ii 个任务单独完成所需的时间是 T_i 。在每批任务开始前,机器需要启动时间 s,而完成这批任务所需的时间是各个任务需要时间的总和。 注意,同一批任务将在同一时刻完成。 每个任务的费用是它的完成时刻乘以一个费用系数 C_i。请确定一个分组方

Read More

洛谷P4781 题解公式 inline int FastPow(int x, int y) { if (y == 1) return x; if (!y) return 1; int tmp = FastPow(x, y >> 1) % mod; return tmp * tmp % mod * (y & 1 ? x : 1) % mod; } inline void Lagrange() { go(i, 1, n, 1) { up = down = 1; go(j, 1,

Read More

使用 Tarjan 算法 lli fa[maxn]; lli dfn[maxn]; lli low[maxn]; bool cut[maxn]; void tarjan(lli u) { dfn[u] = ++cnt; low[u] = dfn[u]; lli child = 0; for (lli i = 0; i < mp[u].size(); ++i) { lli v = mp[u][i]; if (!dfn[v]) { ++child; fa[v] = u; tarjan(v);

Read More

约定存边方式为从左部到右部的有向边,左右部点编号相同 匈牙利算法 lli mch[maxn]; lli vis[maxn]; bool dfs_hun(lli u, lli dfn) { if (vis[u] == dfn) return false; vis[u] = dfn; for (lli i = head[u]; ~i; i = edge[i].nxt) { lli v = edge[i].v; if (mch[v] == 0 || dfs_hun(mch[v], dfn)) { mc

Read More

lli n; lli arr[maxn]; lli lg[maxn]; lli st[maxn][32]; inline lli flg(lli x) { if (lg[x]) return lg[x]; lli tmp = x; lli res = 0; while (tmp) tmp >>= 1, ++res; return lg[x] = res – 1; } inline void init_st() { for (lli i = 1; i <= n; ++i) st[

Read More

条款 01:视 C++ 为一个语言联邦 C++分为:C部分、对象C++部分、模板C++部分、STL部分。 条款 02:尽量以 const、enum、inline 替换 #define const: 表示修饰的内容不可更改。 enum: 本质是 int 类型。 inline: 在 class 内时,如果函数允许,他被自动启用。 条款 03:尽可能使用 const 这有利于编译器更好的优化程序,并且让客户减少误操作。 在函数传值时,对于自定义类型,最好使用 const 引用。 用 mutable 修

Read More

const int MAXN = 1e7 + 100; int num = 0; //素数集合的大小 bool prime[MAXN]; //素数表[prime[i]表示i是否为素数] int Prime[MAXN]; //素数集合[Prime[0~num]保存着0~MAXN中的素数] void make_prime() { memset(prime, true, sizeof prime); //重置素数表,假设都是素数 prime[0] = prime[1] = false; //规定0和1

Read More