welcome
用来写模拟赛、非洛谷(及其RemoteJudge)题的题解
学习笔记、游记等见 洛谷博客
密码不用猜,有的可以私我,有的退役后应该会放出来
一些记号:划掉代表自己做出来的,斜体代表口胡
头文件(其他代码中省略)
注: 需要 \(8\) M 空间
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx;
#define For(i,x,y,...) for(int i=x,##__VA_ARGS__;i<=(y);++i)
#define rFor(i,x,y,...) for(int i=x,##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=x,##__VA_ARGS__;i<(y);++i)
#define mem(a,x,n) memset(a,x,sizeof(*a)*((n)+1))
#define pb emplace_back
#define sz(a) int(a.size())
#define all(a) a.begin(),a.end()
#define MT make_tuple
#define MP make_pair
#define fi first
#define se second
#define lwb lower_bound
#define upb upper_bound
#ifdef FS
#define ast(x) assert(x)
#else
#define ast(x) void()
#endif
typedef long long LL; typedef unsigned long long uLL;
typedef vector<int> Vi; typedef pair<int,int> Pii;
auto ckmax=[](auto &x,auto y) { return x<y ? x=y,true : false; };
auto ckmin=[](auto &x,auto y) { return y<x ? x=y,true : false; };
sfmt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
int rnd(int l,int r) { return uniform_int_distribution<>(l,r)(mt); }
#define endl '\n'
namespace IO { const int L = 1<<22; char a[L],*l=a,*r=a,b[L],*p=b;
auto gc=[]() { if(l==r)r=(l=a)+fread(a,1,L,stdin);return l==r?EOF:*l++; };
auto pc=[](char x) { if(p-b==L)fwrite(b,1,L,stdout),p=b;*p++=x; };
struct IO {
~IO() { fwrite(b,1,p-b,stdout); }
IO& operator >> (char &x) { while(isspace(x=gc())); return *this; }
IO& operator >> (char *s) {
while(isspace(*s=gc())); while(isgraph(*++s=gc()));
return *s=0, *this;
}
template<typename T>IO& operator >> (T &x) {
x=0;bool f=1;char c;while(!isdigit(c=gc()))if(c=='-')f=0;
if(f)for(;isdigit(c);c=gc())x=x*10+c-48;
else for(;isdigit(c);c=gc())x=x*10-c+48;
return *this;
}
IO& operator << (char x) { return pc(x), *this; }
IO& operator << (char *s) { while( *s ) pc(*s++); return *this; }
IO& operator << (const char *s) { while( *s ) pc(*s++); return *this; }
template<typename T>IO& operator << (T x) {
if(!x)pc(48);
else{static char s[44];char *t=s;if(x<0)pc('-'),*t++=-(x%10),x=-x/10;
for(;x;x/=10)*t++=x%10;while(s!=t)pc(*--t|48);}
return *this;
}
} io; } using IO::io;
#define getchar() IO::gc()
#define putchar(x) IO::pc(x)
template<typename T=int>T read() { T x; io>>x; return x; }
const int mod = 998244353, inf = 0x3f3f3f3f;
struct mint {
int x; mint(int x=0):x(x<0?x+mod:x<mod?x:x-mod){}
mint(LL y) { y%=mod, x=y<0?y+mod:y; }
mint& operator += (const mint &y) { x=x+y.x<mod?x+y.x:x+y.x-mod; return *this; }
mint& operator -= (const mint &y) { x=x-y.x<0?x-y.x+mod:x-y.x; return *this; }
mint& operator *= (const mint &y) { x=1ll*x*y.x%mod; return *this; }
mint& operator /= (const mint &y) { return *this*=y^mod-2; }
mint& operator ^= (LL y)
{ mint x=*this,z(1);for(;y;y>>=1,x*=x)if(y&1)z*=x;return *this=z; }
friend mint operator + (mint a,const mint &b) { return a+=b; }
friend mint operator - (mint a,const mint &b) { return a-=b; }
friend mint operator * (mint a,const mint &b) { return a*=b; }
friend mint operator / (mint a,const mint &b) { return a/=b; }
friend mint operator ^ (mint a,LL b) { return a^=b; }
mint operator - () const { return x?mod-x:0; }
}; mint Pow(mint x,LL y=mod-2) { return x^=y; }
signed main() {
#ifdef FS
freopen("in","r",stdin);// freopen("out","w",stdout);
#endif
return 0;
}
upd:
2021.5.24: PB
改为 pb
2021.5.27: 增加 FF
2021.6.3: 增加 Gor
2021.6.7: push_back
改为 emplace_back
,Gor
改为 Jor
2021.6.18: mem(a,x)
改为 mem(a,x,n)
2021.6.19: Jor
改为 rFor
,freopen
增加文件名 a
2021.7.8:getchar
改为 getc
2021.7.14: 增加 write
2021.7.18: ioclear
改为 iocl
2021.8.1: getc
改为 getchar
,putc
改为putchar
2021.8.6 增加 ckmax
,ckmin
2021.8.21 删除 FF
,增加 VI
,略调码风
2021.9.2 修改 buf,pbuf
大小
2021.9.6 修改 For,rFor
2021.10.6 增加 Rep
2021.10.10 增加 MT
,iocl()
改为 ocl()
2021.10.11 增加 all
2021.10.17 修改 read
(注意 double
的精度)
2021.10.20 修改 ckmax
,ckmin
2021.10.25 修改 buf,pbuf
大小,增加 LLL
2021.10.31 注释 LLL
(__int128
在 CF 上会 CE)
2021.11.8 Rep
中 int i
改为 auto i
、<
改为 !=
,删除 LLL
2021.11.12 增加 pbds
相关头文件和命名空间,Rep
中改回 int i, <
2021.11.15 删除 long doube(LD)
2021.11.29 增加 __gnu_pbds::priority_queue
2021.12.7 增加 complex<double>,mod,ckadd,ckdel,Pow
2021.12.8 增加 sz
2021.12.9 增加 #ifdef
2021.12.30 删除 complex<double>
2022.1.24 增加 LD
2022.2.6 增加 lwb,upb
2022.2.9 修改 read,write
2022.2.13 long double(LD)
改为 double(DB)
2022.2.17 增加 putchar(10)(Endl)
2022.2.20 增加 namespace __gnu_cxx
2022.3.2 重构快读、快写(io>>,io<<
),增加 endl
2022.3.7 ULL
改为 uLL
,DB
改为 db
,PII
改为 Pii
,VI
改为 Vi
2022.3.19 增加字符串快写(template<typename T,T=is_integral<T>::value>
:只识别整形)
2022.4.2 删除 __gnu_pbds::priority_queue
,增加 mt,rnd
2022.4.19 删除 double(db)
2022.4.27 合并 ckadd,ckdel
,增加 Mod,assert(ast)
,ckmax,ckmin
返回值改为 bool
2022.5.12 增加字符串快读
2022.6.2 修改快写、Mod
,增加 ckdel
2022.6.4 增加 read,Add,Del
,删除 Mod
2022.6.10 使用 lambda 重写 ckmax,ckmin,Add,Del,ckadd,ckdel
2022.6.11 增加 inf
2022.6.21 删除 Add,Del,ckadd,ckdel,Pow
,增加 mint
2022.6.27 增加 Pow
2022.7.15 增加 getchar, putchar