Loading

代码模板

代码

#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) 即计算 amod 意义下的值(数学意义),支持负数,返回值是介于 \([0,mod]\) 中的整数。

mod_plus(), mod_sub()

mod_plus(a, b, mod) 即计算 a + bmod 意义下的值(数学意义)。

mod_sub(a, b, mod) 即计算 a - bmod 意义下的值(数学意义)。

posted @ 2025-08-27 11:45  lajishift  阅读(23)  评论(0)    收藏  举报