Day-0
T1
-
从一点开始以固定方向行走,会出现循环节
- 该结论由
的测试点推出
- 该结论由
-
判断两个串是否相同
- 字符串哈希
-
倍增预处理出长度为
的循环节子串
T2
-
最小环计数
-
Floyd 会超时
-
计数由
构成的环- 依题解代码
-
同学赛时代码
- 更好理解
#include <bits/stdc++.h> #define N 6005 //记得改数据范围!!!!!!!!!!!!!!!!!! !!!!!!!!!! #define M 10000005 #define ll long long #define lowbit(x) (x & -x) #define ls(x) llll[x] #define rs(x) rrrr[x] #define x first #define y second #define PII pair<int, int> #define PIL pair<int, ll> #define PLI pair<ll, int> #define PLL pair<ll, ll> #define mk make_pair #define mod 998244353 //改模数!!!!!!!!!!!! #define bas 29 //#define int long long using namespace std; int n, m; struct node { int v, id; }; vector<node> mp[N]; struct eee { int u, v; } edge[N]; int dis[N], vis[N]; ll cnt[N]; signed main() { freopen("b.in", "r", stdin); freopen("b.out", "w", stdout); ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> m; for (int i = 1; i <= m; ++i) { int u, v; cin >> u >> v; edge[i] = (eee){ u, v }; mp[u].push_back((node){ v, i }); mp[v].push_back((node){ u, i }); } int minn = 1e9; ll ans = 0; for (int i = 1; i <= m; ++i) { int s = edge[i].u, t = edge[i].v; queue<PII> l; l.push(mk(s, 0)); memset(vis, 0, sizeof(vis)); memset(dis, 0x3f, sizeof(dis)); memset(cnt, 0, sizeof(cnt)); cnt[s] = 1; dis[s] = 0; while (!l.empty()) { int u = l.front().x; l.pop(); if (vis[u]) continue; vis[u] = 1; for (int j = 0; j < mp[u].size(); ++j) { int v = mp[u][j].v; if (mp[u][j].id > i) { l.push(mk(v, dis[u] + 1)); if (dis[u] + 1 < dis[v]) { dis[v] = dis[u] + 1; cnt[v] = cnt[u]; } else if (dis[u] + 1 == dis[v]) cnt[v] += cnt[u]; } } } if (dis[t] + 1 < minn) { minn = dis[t] + 1; ans = cnt[t]; } else if (dis[t] + 1 == minn) ans += cnt[t]; } cout << ans; return 0; }
T3
-
区间DP
- 适用范围:子问题解决 能使得 母问题解决
-
std::max
-
传入多个参数
-
好像更快
# include <bits/stdc++.h> # define int long long using namespace std; signed main(){ int a = 6, b = 66, c = 666; int maxi = max({a, b, c}); cout << maxi << "\n"; }
//6.838S # include <bits/stdc++.h> # define int long long using namespace std; const int N = (int)5e7 + 10; int n = (int)5e7; int a[N]; signed main(){ freopen("1.in", "r", stdin); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i = 1; i <= n; i++){ cin >> a[i]; } int maxi = 0; for(int i = 1; i <= n; i += 6){ maxi = max(a[i], max(a[i + 1], max(a[i + 2], max(a[i + 3], max(a[i + 4], a[i + 5]))))); } cout << maxi << "\n"; } //6.711S # include <bits/stdc++.h> # define int long long using namespace std; const int N = (int)5e7 + 10; int n = (int)5e7; int a[N]; signed main(){ freopen("1.in", "r", stdin); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i = 1; i <= n; i++){ cin >> a[i]; } int maxi = 0; for(int i = 1; i <= n; i += 6){ maxi = max({a[i], a[i + 1], a[i + 2], a[i + 3], a[i + 4], a[i + 5]}); } cout << maxi << "\n"; } -
T4
- 重点在于将原题建图
- 转化为同一连通块内的问题
- 将城市看作点,奇数个入度的点需要带仆人
- 同一连通块内点的入度可以均摊
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话