T1:321-like Checker
模拟
代码实现
#include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; for (int i = 0; i+1 < s.size(); ++i) { if (s[i] <= s[i+1]) { puts("No"); return 0; } } puts("Yes"); return 0; }
T2:Cutoff
暴力枚举 即可
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; int main() { int n, x; cin >> n >> x; vector<int> a(n); rep(i, n-1) cin >> a[i]; while (a.back() <= 100) { auto b = a; sort(b.begin(), b.end()); int s = 0; for (int i = 1; i < n-1; ++i) s += b[i]; if (s >= x) { cout << a.back() << '\n'; return 0; } a.back()++; } puts("-1"); return 0; }
T3:321-like Searcher
暴搜出所有的 321-like Number
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; int main() { int k; cin >> k; vector<ll> a; rep(s, 1<<10) { ll x = 0; for (int i = 9; i >= 0; --i) { if (s>>i&1) { x = x*10+i; } } if (x == 0) continue; a.push_back(x); } sort(a.begin(), a.end()); cout << a[k-1] << '\n'; return 0; }
T4:Set Menu
然后用二分+前缀和处理一下即可
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; int main() { int n, m, p; cin >> n >> m >> p; vector<int> a(n), b(m); rep(i, n) cin >> a[i]; rep(i, m) cin >> b[i]; sort(a.begin(), a.end()); sort(b.begin(), b.end()); vector<ll> s(m+1); rep(i, m) s[i+1] = s[i]+b[i]; ll ans = 0; rep(i, n) { int j = lower_bound(b.begin(), b.end(), p-a[i])-b.begin(); ans += 1ll*p*(m-j); ans += 1ll*a[i]*j; ans += s[j]; } cout << ans << '\n'; return 0; }
T5:Complete Binary Tree
枚举
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using ll = long long; void solve() { ll n, x, k; cin >> n >> x >> k; auto f = [&](ll v, ll d) -> ll { if (v > n) return 0; ll l = v, r = v; rep(i, d) { l <<= 1; r = r<<1|1; if (l > n) return 0; } r = min(r, n); return r-l+1; }; ll ans = f(x, k); while (x > 1 and k >= 2) { ans += f(x^1, k-2); k--; x >>= 1; } if (k == 1 and x != 1) ans++; cout << ans << '\n'; } int main() { int t; cin >> t; while (t--) solve(); return 0; }
T6:#(subset sum = K) with Add and Erase
回退背包
代码实现
#include <bits/stdc++.h> #if __has_include(<atcoder/all>) #include <atcoder/all> using namespace atcoder; #endif #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using mint = modint998244353; int main() { int q, k; cin >> q >> k; vector<mint> dp(k+1); dp[0] = 1; rep(qi, q) { char c; int x; cin >> c >> x; if (c == '+') { for (int i = k; i >= x; --i) { dp[i] += dp[i-x]; } } else { for (int i = x; i <= k; ++i) { dp[i] -= dp[i-x]; } } cout << dp[k].val() << '\n'; } return 0; }
T7:Electric Circuit
状压dp+容斥
记 dp[S]
表示由集合 中的点构成的图中为连通图的方案数
代码实现
#include <bits/stdc++.h> #if __has_include(<atcoder/all>) #include <atcoder/all> using namespace atcoder; #endif #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; using mint = modint998244353; struct modinv { int n; vector<mint> d; modinv(): n(2), d({0,1}) {} mint operator()(int i) { while (n <= i) d.push_back(-d[mint::mod()%n]*(mint::mod()/n)), ++n; return d[i]; } mint operator[](int i) const { return d[i];} } invs; struct modfact { int n; vector<mint> d; modfact(): n(2), d({1,1}) {} mint operator()(int i) { while (n <= i) d.push_back(d.back()*n), ++n; return d[i]; } mint operator[](int i) const { return d[i];} } facts; struct modfactinv { int n; vector<mint> d; modfactinv(): n(2), d({1,1}) {} mint operator()(int i) { while (n <= i) d.push_back(d.back()*invs(n)), ++n; return d[i]; } mint operator[](int i) const { return d[i];} } ifacts; mint comb(int n, int k) { if (n < k || k < 0) return 0; return facts(n)*ifacts(k)*ifacts(n-k); } int main() { int n, m; cin >> n >> m; vector c(2, vector<int>(n)); rep(j, 2) { rep(i, m) { int v; cin >> v; --v; c[j][v]++; } } int n2 = 1<<n; vector<mint> d(n2); rep(s, n2) { vector<int> nc(2); rep(i, n) if (s>>i&1) { rep(j, 2) nc[j] += c[j][i]; } if (nc[0] != nc[1]) continue; d[s] = facts(nc[0]); } mint ans; vector<mint> dp(n2); rep(s, n2) if (s) { dp[s] = d[s]; int v = s&-s; int ns = s^v; for (int t = ns; t; t = (t-1)&ns) { dp[s] -= dp[s^t]*d[t]; } ans += dp[s]*d[(n2-1)^s]; } ans *= ifacts(m); cout << ans.val() << '\n'; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现