VP AtCoder Beginner Contest 378
A - Pairing
点击查看代码
void solve() {
std::map<int, int> mp;
for (int i = 0; i < 4; ++ i) {
int x;
std::cin >> x;
++ mp[x];
}
int ans = 0;
for (auto & [x, y] : mp) {
ans += y / 2;
}
std::cout << ans << "\n";
}
B - Garbage Collection
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<int> a(n), b(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i] >> b[i];
}
int q;
std::cin >> q;
while (q -- ) {
int t, d;
std::cin >> t >> d;
-- t;
int x = d % a[t];
if (x == 0) {
x = a[t];
}
int ans = x <= b[t] ? b[t] - x + d : a[t] - x + b[t] + d;
std::cout << ans << "\n";
}
}
C - Repeating
题意:找
用
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<int> a(n + 1);
for (int i = 1; i <= n; ++ i) {
std::cin >> a[i];
}
std::vector<int> b(n + 1, -1);
std::map<int, int> last;
for (int i = 1; i <= n; ++ i) {
if (last.count(a[i])) {
b[i] = last[a[i]];
}
last[a[i]] = i;
}
for (int i = 1; i <= n; ++ i) {
std::cout << b[i] << " \n"[i == n];
}
}
D - Count Simple Paths
题意:求矩阵里所有长度为
数据都很小,直接爆搜。
点击查看代码
void solve() {
int n, m, k;
std::cin >> n >> m >> k;
std::vector<std::string> s(n);
for (int i = 0; i < n; ++ i) {
std::cin >> s[i];
}
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int ans = 0;
std::vector st(n, std::vector<int>(m));
auto dfs = [&](auto self, int x, int y, int t) -> void {
if (t == k) {
++ ans;
return;
}
for (int i = 0; i < 4; ++ i) {
int nx = x + dx[i], ny = y + dy[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= m || s[nx][ny] == '#' || st[nx][ny]) {
continue;
}
st[nx][ny] = 1;
self(self, nx, ny, t + 1);
st[nx][ny] = 0;
}
};
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < m; ++ j) {
if (s[i][j] == '.') {
st[i][j] = 1;
dfs(dfs, i, j, 0);
st[i][j] = 0;
}
}
}
std::cout << ans << "\n";
}
E - Mod Sigma Problem
题意:给你一个数组,求所有区间的区间和对
求出对
点击查看代码
template <class T>
struct Fenwick {
int n;
std::vector<T> tr;
Fenwick(int _n) {
init(_n);
}
void init(int _n) {
n = _n;
tr.assign(_n + 1, T{});
}
void add(int x, const T &v) {
for (int i = x; i <= n; i += i & -i) {
tr[i] = tr[i] + v;
}
}
T query(int x) {
T res{};
for (int i = x; i; i -= i & -i) {
res = res + tr[i];
}
return res;
}
T sum(int l, int r) {
return query(r) - query(l - 1);
}
};
void solve() {
int n, m;
std::cin >> n >> m;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
std::vector<int> sum(n + 1);
for (int i = 0; i < n; ++ i) {
sum[i + 1] = (sum[i] + a[i]) % m;
}
Fenwick<int> tr(m + 1);
i64 ans = 0, pre = 0;
for (int i = 1; i <= n; ++ i) {
ans += (i64)i * sum[i] - pre;
ans += (i64)tr.sum(sum[i] + 1, m) * m;
if (sum[i] > 0) {
tr.add(sum[i], 1);
}
pre += sum[i];
}
std::cout << ans << "\n";
}
F - Add One Edge 2
题意:在一棵树里加一条边,使得产生的边里的每个点度数都为
发现肯定使加在两个度数为
点击查看代码
struct DSU {
std::vector<int> fa, cnt;
DSU(int _n) {
init(_n);
}
void init(int _n) {
fa.assign(_n, 0);
cnt.assign(_n, 1);
std::iota(fa.begin(), fa.end(), 0);
}
int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
bool merge(int x, int y) {
x = find(x), y = find(y);
if (x == y) {
return false;
}
fa[y] = x;
cnt[x] += cnt[y];
return true;
}
bool same(int x, int y) {
return find(x) == find(y);
}
int size(int x) {
return cnt[find(x)];
}
};
void solve() {
int n;
std::cin >> n;
std::vector<std::vector<int>> adj(n);
for (int i = 1; i < n; ++ i) {
int u, v;
std::cin >> u >> v;
-- u, -- v;
adj[u].push_back(v);
adj[v].push_back(u);
}
DSU dsu(n);
for (int u = 0; u < n; ++ u) {
if (adj[u].size() == 3) {
for (auto & v : adj[u]) {
if (adj[v].size() == 3) {
dsu.merge(u, v);
}
}
}
}
std::vector<std::vector<int>> S(n);
for (int i = 0; i < n; ++ i) {
S[dsu.find(i)].push_back(i);
}
i64 ans = 0;
for (int i = 0; i < n; ++ i) {
if (adj[i].size() != 3) {
continue;
}
int cnt = 0;
for (auto & u : S[i]) {
for (auto & v : adj[u]) {
if (adj[v].size() == 2) {
++ cnt;
}
}
}
ans += (i64)cnt * (cnt - 1) / 2;
}
std::cout << ans << "\n";
}
分类:
atcoder
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!