日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OI模板のpoke流[大型考试复习必备/kl]

發(fā)布時(shí)間:2025/3/14 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OI模板のpoke流[大型考试复习必备/kl] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)論

快速乘:

ll qmul(ll x,ll y,ll mod) {ll ans=0;while(y){if(y&1) (ans+=x)%=mod;y>>=1;(x+=x)%=mod;}return ans; }

快速冪:

ll qpow(ll x,ll y,ll mod) {ll ans=1;while(y){if(y&1) (ans*=x)%=mod;y>>=1;(x*=x)%=mod;}return ans; }

Gcd:

ll gcd(ll a,ll b) {return b?gcd(b,a%b):a; }

Exgcd:

void exgcd(ll a,ll b,ll &x,ll &y) {if(b) exgcd(b,a%b,y,x),y-=a/b*x;else x=1,y=0; }

?Lucas:

void init() {f[0]=v[0]=1; for(int i=1;i<=mod;i++) f[i]=f[i-1]*i%mod;v[mod-1]=mod-1; for(int i=mod-2;i;i--) v[i]=v[i+1]*(i+1)%mod; } ll lucas(ll a,ll b) {if(a<b)return 0;if(a<mod&&b<mod)return 1ll*f[a]*v[b]%mod*v[a-b]%mod;return 1ll*lucas(a%mod,b%mod)*lucas(a/mod,b/mod)%mod; }

ExLucas:

ll num(ll x,ll p) {ll re=0;while(x){re+=x/p;x/=p;}return re; } ll fac(ll n,ll p,ll pc) {if(!n) return 1ll;ll sum=1ll;for(int i=1;i<pc;i++) if(i%p) (sum*=i)%=pc;ll ans=qpow(sum,n/pc,pc);for(int i=1;i<=n%pc;i++) if(i%p) (ans*=i)%=pc;return ans*fac(n/p,p,pc)%pc; } ll inv(ll n,ll p) {ll x,y;exgcd(n,p,x,y);((x%=p)+=p)%=p;return x; } ll C(ll x,ll y,ll p,ll pc) {if(x<y) return 0ll;int cnt=num(x,p)-num(y,p)-num(x-y,p);return fac(x,p,pc)*inv(fac(y,p,pc),pc)%pc*inv(fac(x-y,p,pc),pc)%pc*qpow(p,cnt,pc)%pc; }

BSGS:

map<ll,ll>MP; ll bsgs(ll A,ll B,ll C) // x^A \equiv B (mod\ C) {ll m=ceil(sqrt(C+0.5));MP.clear();ll now=1;for(int i=1;i<=m;i++){(now*=A)%=C;if(!MP[now]) MP[now]=i;}A=qpow(A,m,C);now=1;for(int i=0;i<=m;i++){ll x,y;exgcd(now,C,x,y);x=(x*B%C+C)%C;if(MP.count(x)) return i*m+MP[x];(now*=A)%=C;}return 0; }

求原根:

ll get_ori(ll p,ll phi) {int c=0;for(int i=2;1ll*i*i<=phi;i++) if(phi%i==0){f[++c]=i; f[++c]=phi/i;}for(int g=2;;g++){int j;for(j=1;j<=c;j++) if(qpow(g,f[j],p)==1) break;if(j==c+1) return g;}return 0; }

線性基:

for(i=1<<30;i;i>>=1) {for(j=1;j<=n;j++) if(!vis[j]&&a[j].v&i) break;if(j>n) continue;sum-=a[j].num; vis[j]=true;for(k=1;k<=n;k++) if(!vis[k]&&a[k].v&i) a[k].v^=a[j].v; }

?圖論

tarjan:

void tarjan(int p) {st[++top]=p; ins[p]=true;dep[p]=low[p]=++cnt;for(int i=head[p];i;i=nxt[i]){if(!dep[to[i]) tarjan(to[i]),low[p]=min(low[p],low[to[i]]);else if(ins[to[i]]) low[p]=min(low[p],dep[to[i]]);}if(dep[p]==low[p]){Number++;int t;do{t=st[top--]; ins[t]=false;f[Number][++f[Number][0]]=t;}while(t!=p);} }

堆優(yōu)化Dijkstra:

priority_queue<pair<int,int> >q; void Dijkstra() {while(!q.empty()) q.pop();memset(dis,0x3f,sizeof dis); dis[S]=0; q.push(mp(0,S));while(!q.empty()){while(!q.empty()&&-q.top().first>dis[q.top().second]) q.pop();if(q.empty()) return;int x=q.top().second; q.pop();for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]>dis[x]+val[i]){dis[to[i]]=dis[x]+val[i];q.push(mp(-dis[to[i]],to[i]));}} }

?spfa:

queue<int>q; void spfa() {while(!q.empty()) q.pop();memset(dis,0x3f,sizeof dis); dis[S]=0; q.push(S);vis[x]=true;while(!q.empty()){int x=q.front(); q.pop(); vis[x]=false;for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]>dis[x]+val[i]){dis[to[i]]=dis[x]+val[i];if(!vis[to[i]]) q.push(to[i]),vis[to[i]]=true;}} }

倍增lca

void dfs(int p, int fa) {f[0][p] = fa;dep[p] = dep[fa] + 1;for (int i = 1; i <= 20; i ++ )f[i][p] = f[i-1][f[i-1][p]];for (int i = head[p]; i; i = nxt[i]) {if(to[i] != fa) {dfs(to[i], p);}} }int lca(int x, int y) {if (dep[x] < dep[y]) swap(x, y);for (int i = 20; ~i; i -- ) {if (dep[f[i][x]] >= dep[y]) {x = f[i][x];}}if (x == y) return x;for (int i = 20; ~i; i -- ) {if (f[i][x] != f[i][y]) {x = f[i][x];y = f[i][y];}}return f[0][x]; }

?

?數(shù)據(jù)結(jié)構(gòu)

非旋轉(zhuǎn)Treap

int merge(int x, int y) {if (!x || !y) return x | y;pushdown(x); pushdown(y);if (a[x].key > a[y].key) {a[x].rs = merge(a[x].rs, y);pushup(x);return x;}else {a[y].ls = merge(x, a[y].ls);pushup(y);return y;} }par split(int x, int k) {if(!k)return (par) {0, x};pushdown(x);int ls = a[x].ls, rs = a[x].rs;if (k == a[ls].size) {a[x].ls = 0;pushup(x);return (par) {ls, x};}else if (k == a[ls].size + 1) {a[x].rs = 0;pushup(x);return (par) {x, rs};}else if (k < a[ls].size) {par t = split(ls, k);a[x].ls = t.y;pushup(x);return (par) {t.x, x};}else {par t = split(rs, k - a[ls].size - 1);a[x].rs = t.x;pushup(x);return (par) {x, t.y};} }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ShuraK/p/10381888.html

總結(jié)

以上是生活随笔為你收集整理的OI模板のpoke流[大型考试复习必备/kl]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。