代码模板
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int ui;
#define rep(i, l, r) for(int i = l; i <= r; i++)
#define per(i, l, r) for(int i = l; i >= r; i--)
#define NESTED_MACRO_STR(x) #x
#define MACRO_STR(x) NESTED_MACRO_STR(x)
inline ll read(){
ll res = 0, flg = 1;
char c = getchar();
for(; c > '9' || c < '0'; c = getchar()) if(c == '-') flg = -flg;
for(; c >= '0' && c <= '9'; c = getchar()) res = res * 10 + c - '0';
return res * flg;
}
inline void write(ll x, char c = '\n'){
if(x < 0) putchar('-'), x = -x;
static int sta[35]; int top = 0;
do { sta[top++] = x % 10, x /= 10; } while (x);
while (top) putchar(sta[--top] + 48);
putchar(c);
}
void __deb__(const char *s) { cerr << '\n'; }
template <typename T, typename... Ts>
void __deb__(const char *s, T v, Ts... vs){
const char *c = strchr(s, ',');
string name(s, c ? c - s : strlen(s));
if(std::is_floating_point<T>::value) {
cerr << name << " : " << fixed << setprecision(10) << v;
} else {
cerr << name << " : " << v;
}
if(c) { cerr << " | "; __deb__(c + 1, vs...); }
else cerr << '\n';
}
#define deb(...) __deb__(#__VA_ARGS__, __VA_ARGS__)
template <typename T> void chkmx(T &a, T b) { a = (a > b) ? a : b; }
template <typename T> void chkmn(T &a, T b) { a = (a < b) ? a : b; }
template <typename T> T calc_mod(T x, T mod){ return (x > 0) ? x % mod : (x % mod + mod) % mod; }
template <typename T> void plus_mod(T &x, T y, T mod) { x = calc_mod(calc_mod(x, mod) + calc_mod(y, mod), mod); }
template <typename T> void sub_mod(T &x, T y, T mod) { x = calc_mod(calc_mod(x, mod) - calc_mod(y, mod), mod); }
// #define FILE_NAME (type your freopen file name here)
void solve_test_case(){
}
signed main(){
#ifdef FILE_NAME
freopen((string(MACRO_STR(FILE_NAME)) + ".in").c_str(), "r", stdin);
freopen((string(MACRO_STR(FILE_NAME)) + ".out").c_str(), "w", stdout);
#endif
int Test_case_num = 1;
while(Test_case_num--) solve_test_case();
return 0;
}
用法说明
solve_test_case()
这里是处理一个测试点的函数,在单测时相当于 main() 函数,多测时注意将 main() 中的 int Test_case_num = 1; 改为 int Test_case_num = read();,即读入测试点个数。
rep(), per()
rep(i, l, r) 等价于 for(int i = l; i <= r; i++)
per(i, l, r) 等价于 for(int i = l; i >= r; i--)
read(), write()
read() 是快速整数读入,返回 long long 类型整数,可带 - 号,忽略非数字字符。
write(num, ch) 是快速整数输出,ch 是结尾字符,不填充时默认 '\n'。
deb()
deb() 是快捷调试宏定义。
一次可以输入多个表达式,用 ',' 分隔,但注意函数表达式如 deb(calc(x, y), z) 就不行。
输出到标准错误流中(stderr),输出格式如下:
int a = 1;
long double b = 114514.1919810;
string c = "Hello, world!";
deb(a, b, c);
的结果是:
a : 1 | b : 114514.1919810000 | c : Hello, world!
浮点数默认保留 10 位小数,且不支持不默认。
FILE_NAME
FILE_NAME 的宏定义在 solve_test_case() 上方,意为文件读写时,输入和输出文件文件名,一般是题目英文代号。
在填写 FILE_NAME 时不需要带双引号。
当不需要读入读写时,就注释掉 #define FILE_NAME ...,即不会触发文件读写。
chkmx(), chkmn()
chkmx(a, b) 即用 b 更新最大值 a。
chkmn(a, b) 即用 b 更新最小值 a。
calc_mod()
calc_mod(a, mod) 即计算 a 模 mod 意义下的值(数学意义),支持负数,返回值是介于 \([0,mod]\) 中的整数。
mod_plus(), mod_sub()
mod_plus(a, b, mod) 即计算 a + b 模 mod 意义下的值(数学意义)。
mod_sub(a, b, mod) 即计算 a - b 模 mod 意义下的值(数学意义)。

浙公网安备 33010602011771号