模板题合集
B3614 【模板】栈
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 14:11:38
* @LastEditTime: 2023-10-19 14:33:54
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\B3614.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int unsigned long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, stk[N], top;
inline void print1(int x){cout << x << endl; return ;}
inline void work()
{
top = 0;
n = read();
string s;
for(int i = 1; i <= n; i ++)
{
cin >> s;
if(s == "push") stk[++ top] = read();
if(s == "pop") {if(top == 0) puts("Empty"); else top --;}
if(s == "query") {if(top == 0) puts("Anguei!"); else print1(stk[top]);}
if(s == "size") cout << top << endl;
}
return ;
}
signed main()
{
int T = read();
while(T --) work();
return 0;
}
P3375 【模板】KMP
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 14:58:36
* @LastEditTime: 2023-10-19 15:01:25
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3375.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
string s1, s2;
int n, m, nxt[N];
signed main()
{
cin >> s1 >> s2;
n = s1.size(), m = s2.size();
s1 = ' ' + s1, s2 = ' ' + s2;
int j = 0;
for(int i = 2; i <= m; i ++)
{
while(j && s2[i] != s2[j + 1]) j = nxt[j];
if(s2[i] == s2[j + 1]) j ++;
nxt[i] = j;
}
j = 0;
for(int i = 1; i <= n; i ++)
{
while(j && s1[i] != s2[j + 1]) j = nxt[j];
if(s1[i] == s2[j + 1]) j ++;
if(j == m) cout << i - m + 1 << endl, j = nxt[j];
}
for(int i = 1; i <= m; i ++)
cout << nxt[i] << " ";
return 0;
}
B3647 【模板】Floyd
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 15:28:48
* @LastEditTime: 2023-10-19 16:22:52
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\B3647.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1010
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, mp[N][N];
signed main()
{
n = read(), m = read();
memset(mp, 0x3f, sizeof mp);
for(int i = 1; i <= n; i ++) mp[i][i] = 0;
for(int i = 1; i <= m; i ++)
{
int u = read(), v = read(), w = read();
mp[u][v] = mp[v][u] = w;
}
for(int k = 1; k <= n; k ++)
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
if(mp[i][j] > mp[i][k] + mp[k][j])
mp[i][j] = mp[i][k] + mp[k][j];
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
cout << mp[i][j] << " ";
cout << endl;
}
return 0;
}
B3616 【模板】队列
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 18:51:16
* @LastEditTime: 2023-10-19 18:52:14
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\3616.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, q[N], l, r;
signed main()
{
n = read();
l = 0, r = -1;
for(int i = 1; i <= n; i ++)
{
int op = read();
if(op == 1) q[++ r] = read();
if(op == 2){if(l > r) puts("ERR_CANNOT_POP"); else l ++;}
if(op == 3){if(l > r) puts("ERR_CANNOT_QUERY"); else cout << q[l] << endl;}
if(op == 4) cout << r - l + 1 << endl;
}
return 0;
}
P1226 【模板】快速幂
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 19:02:01
* @LastEditTime: 2023-10-19 19:02:22
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P1226.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return 0;
}
int m, n, p;
inline int ksm(int x, int y)
{
int res = 1;
while(y)
{
if(y & 1) res = (res * x) % p;
x = (x * x) % p, y >>= 1;
}
return res;
}
signed main()
{
cin >> n >> m >> p;
int ans = ksm(n, m);
cout << n << "^" << m << " mod " << p << "=" << ans << endl;
return 0;
}
P3367 【模板】并查集
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 19:23:45
* @LastEditTime: 2023-10-19 19:33:22
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3367.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1001000
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, f[N];
inline int fid(int x){return f[x] == x ? x : f[x] = fid(f[x]);}
inline void merge(int u, int v)
{
int xx = fid(u), yy = fid(v);
if(xx != yy) f[yy] = xx;
return ;
}
inline int ask(int u, int v){return fid(u) == fid(v) ? 1 : 0;}
signed main()
{
n = read(), m = read();
for(int i = 1; i <= n; i ++) f[i] = i;
for(int i = 1; i <= m; i ++)
{
int op = read(), x = read(), y = read();
if(op == 1) merge(x, y);
if(op == 2) ask(x, y) ? puts("Y") : puts("N");
}
return 0;
}
B3656 【模板】双端队列 1
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 20:21:01
* @LastEditTime: 2023-10-19 20:32:41
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\B3656.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n;
string s;
list<int> q[N];
signed main()
{
n = read();
for(int i = 1; i <= n; i ++)
{
cin >> s;
int x = read();
if(s == "push_back") q[x].push_back(read());
if(s == "pop_back") if(!q[x].empty()) q[x].pop_back();
if(s == "push_front") q[x].push_front(read());
if(s == "pop_front") if(!q[x].empty()) q[x].pop_front();
if(s == "size") cout << q[x].size() << endl;
if(s == "front") if(!q[x].empty()) cout << q[x].front() << endl;
if(s == "back") if(!q[x].empty()) cout << q[x].back() << endl;
}
return 0;
}
P3383 【模板】线性筛素数
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-19 21:47:46
* @LastEditTime: 2023-10-19 22:24:08
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3383.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
// #define int long long
#define N 100010000
#define endl '\n'
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, ans[N], vis[N], cnt;
signed main()
{
n = read(), m = read();
for(int i = 2; i <= n; i ++)
{
if(!vis[i]) ans[++ cnt] = i;
for(int j = 1; j <= cnt && ans[j] * i <= n; j ++)
{
vis[ans[j] * i] = 1;
if(i % ans[j] == 0) break;
}
}
for(int i = 1; i <= m; i ++)
cout << ans[read()] << endl;
return 0;
}
P3366 【模板】最小生成树
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-20 08:17:31
* @LastEditTime: 2023-10-20 08:19:22
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3366.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, m, f[N], num, ans;
struct node{int u, v, w;}e[N];
inline int cmp(node a, node b){return a.w < b.w;}
inline int fid(int x){return f[x] == x ? x : fid(f[x]);}
signed main()
{
n = read(), m = read();
for(int i = 1; i <= n; i ++) f[i] = i;
for(int i = 1; i <= m; i ++)
e[i] = (node){read(), read(), read()};
sort(e + 1, e + m + 1, cmp);
for(int i = 1; i <= m; i ++)
{
int xx = fid(e[i].u), yy = fid(e[i].v);
if(xx == yy) continue;
f[xx] = yy;
ans += e[i].w;
num ++;
if(num == n - 1) break;
}
if(num == n - 1) cout << ans << endl;
else cout << "orz" << endl;
return 0;
}
P3370 【模板】字符串哈希
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-20 08:39:37
* @LastEditTime: 2023-10-20 08:43:24
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3370.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define P 998244353
#define N 10010
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
const int base = 131;
int n, a[N], ans = 1;
char s[N];
inline int Hash()
{
int len = strlen(s + 1), res = 0;
for(int i = 1; i <= len; i ++)
res = (res * base + (int)(s[i] - ' ')) % P;
return res;
}
signed main()
{
n = read();
for(int i = 1; i <= n; i ++)
{
scanf("%s", s + 1);
a[i] = Hash();
}
sort(a + 1, a + n + 1);
for(int i = 1; i < n; i ++)
if(a[i] != a[i + 1]) ans ++;
cout << ans << endl;
return 0;
}
P1886 滑动窗口 /【模板】单调队列
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-20 09:49:19
* @LastEditTime: 2023-10-20 09:53:06
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P1886.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, k, q1[N], q2[N], a[N];
inline void max_()
{
int l = 0, r = -1;
for(int i = 1; i <= n; i ++)
{
while(l <= r && q1[l] + k <= i) l ++;
while(l <= r && a[i] > a[q1[r]]) r --;
q1[++ r] = i;
if(i >= k) cout << a[q1[l]] << " ";
}
cout << endl;
return ;
}
inline void min_()
{
int l = 0, r = -1;
for(int i = 1; i <= n; i ++)
{
while(l <= r && q2[l] + k <= i) l ++;
while(l <= r && a[i] < a[q2[r]]) r --;
q2[++ r] = i;
if(i >= k) cout << a[q2[l]] << " ";
}
cout << endl;
return ;
}
signed main()
{
n = read(), k = read();
for(int i = 1; i <= n; i ++) a[i] = read();
min_();
max_();
return 0;
}
B3644 【模板】拓扑排序 / 家谱树
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-20 10:06:49
* @LastEditTime: 2023-10-20 10:08:43
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\B3644.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * f;
}
int n, head[N], du[N], stk[N], top, cnt;
struct node{int u, v, next;}e[N << 1];
inline void add(int u, int v){e[++ cnt] = (node){u, v, head[u]}; head[u] = cnt;}
inline void topo()
{
queue<int> q;
for(int i = 1; i <= n; i ++)
if(!du[i]) q.push(i);
while(!q.empty())
{
int u = q.front();
q.pop();
stk[++ top] = u;
for(int i = head[u]; i; i = e[i].next)
{
int v = e[i].v;
du[v] --;
if(du[v] == 0) q.push(v);
}
}
return ;
}
signed main()
{
n = read();
for(int i = 1; i <= n; i ++)
{
while(1)
{
int v = read();
if(v == 0) break;
add(i, v);
du[v] ++;
}
}
topo();
for(int i = 1; i <= n; i ++)
cout << stk[i] << " ";
return 0;
}
P3382 【模板】三分
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-20 10:45:38
* @LastEditTime: 2023-10-20 10:56:15
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3382.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include <bits/stdc++.h>
#define int long long
#define DB double
#define N 1000100
using namespace std;
const DB eps = 1e-8;
int n;
DB L, R, a[N];
inline DB F(DB x)
{
DB res = 0;
for(int i = n; i >= 0; i --)
res = res * x + a[i];
return res;
}
signed main()
{
cin >> n >> L >> R;
for(int i = n; i >= 0; i --) cin >> a[i];
while(fabs(R - L) >= eps)
{
DB mid = (L + R) / 2;
if(F(mid + eps) > F(mid - eps)) L = mid;
else R = mid;
}
printf("%.5lf\n", L);
return 0;
}
P3368 【模板】树状数组 2
/*
* @Author: Aisaka_Taiga
* @Date: 2023-10-20 21:16:30
* @LastEditTime: 2023-10-20 21:19:47
* @LastEditors: Aisaka_Taiga
* @FilePath: \Desktop\P3368.cpp
* The heart is higher than the sky, and life is thinner than paper.
*/
#include<bits/stdc++.h>
#define int long long
#define N 1000100
using namespace std;
inline int read()
{
int x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}
while(c <= '9' && c >= '0') x = (x << 1) + (x << 3) +(c ^ 48), c = getchar();
return x * f;
}
int n, m, a[N], t[N];
inline int lb(int x){return x & -x;}
inline void add(int x, int v){while(x <= n) t[x] += v, x += lb(x);}
inline int ask(int x){int ans = 0; while(x >= 1) ans += t[x], x -= lb(x); return ans;}
signed main()
{
n = read(), m = read();
for(int i = 1; i <= n; i ++) a[i] = read();
for(int i = 1; i <= m; i ++)
{
int op = read();
if(op == 1)
{
int x = read(), y = read(), k = read();
add(x, k);
add(y + 1, -k);
}
if(op == 2)
{
int x = read();
cout << ask(x) + a[x] << endl;
}
}
return 0;
}
本文来自博客园,作者:北烛青澜,转载请注明原文链接:https://www.cnblogs.com/Multitree/p/17774672.html
The heart is higher than the sky, and life is thinner than paper.