AtCoder Beginner Contest 378
A - Pairing#
题意#
给
个数,每次选两个数字相同的丢掉。求最大操作数。
思路#
模拟。
代码#
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
const int mxn = 1e6 + 5;
void solve()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
map<int, int> m;
m[a]++;
m[d]++;
m[c]++;
m[b]++;
int ans = 0;
for (auto& i : m)
{
ans += i.second / 2;
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
while (T--)
{
solve();
}
return 0;
}
B - Garbage Collection#
题意#
有
种垃圾,对于第 种垃圾,当日期对 取模等于 时,这种垃圾会被回收。有 次查询,对于第 次查询,给定垃圾类型 和投放日期 ,输出这种垃圾下一次被回收的日期。
注:如果垃圾的投放日期和收集日期相同,则垃圾会在当天被回收。
思路#
模拟。
代码#
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
void solve()
{
int n;
cin >> n;
vector<int> q(n), r(n);
for (int i = 0; i < n; ++i)
{
cin >> q[i] >> r[i];
}
int Q;
cin >> Q;
while (Q--)
{
int t, d;
cin >> t >> d;
t--;
int qi = q[t], ri = r[t];
int now = d % qi, ans;
if (now == ri)
{
ans = d;
}
else if (now < ri)
{
ans = d + ri - now;
}
else
{
ans = d + qi - now + ri;
}
cout << ans << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
while (T--)
{
solve();
}
return 0;
}
C - Repeating#
题意#
给定长度为
的正整数序列 。定义序列 ,对于 ,若存在 使得 则 ,否则 。
思路#
模拟,怕超时用了个
记录下标到 时出现过的元素。
代码#
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
void solve()
{
int n;
cin >> n;
vector<int> v(n), b(n, -1);
for (int i = 0; i < n; i++)
{
cin >> v[i];
}
set<int> s;
for (int i = 0; i < n; i++)
{
if (s.count(v[i]))
{
for (int j = i - 1; j >= 0; j--)
{
if (v[j] == v[i])
{
b[i] = j + 1;
break;
}
}
}
s.insert(v[i]);
}
for (int i = 0; i < n; i++)
{
cout << b[i] << " ";
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
while (T--)
{
solve();
}
return 0;
}
D - Count Simple Paths#
题意#
给定
行、 列的图,"."表示空,"#"表示阻塞。求从每个点出发,不被阻塞的、长度为 的路径条数(不能重复经过一点)。
思路#
数据非常小,直接搜。
代码#
点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
const int mxn = 15;
char mp[mxn][mxn];
bool vis[mxn][mxn];
int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };
int h, w, k;
int ans;
void dfs(int x, int y, int step)
{
if (step == k)
{
ans++;
return;
}
for (int i = 0; i < 4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if (tx < 0 || tx >= h || ty < 0 || ty >= w || vis[tx][ty] || mp[tx][ty] == '#')
{
continue;
}
vis[tx][ty] = true;
dfs(tx, ty, step + 1);
vis[tx][ty] = false;
}
}
void solve()
{
cin >> h >> w >> k;
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
cin >> mp[i][j];
}
}
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
if (mp[i][j] == '.')
{
vis[i][j] = true;
dfs(i, j, 0);
vis[i][j] = false;
}
}
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
while (T--)
{
solve();
}
return 0;
}
E - Mod Sigma Problem#
题意#
思路#
设序列
为序列 的前缀和,则原式可化作:
由于,则:
从而可以将式子进一步化为:
对于的求解,可以维护一个树状数组 。定义 为 中 的数量,则 ,然后再向 中加 。
树状数组:
视频1 视频2
b站这两个视频讲的很好
代码#
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;
const int mxn = 1e6 + 5;
int n, m, ans;
int t[mxn];
inline int lowbit(int x)
{
return x & -x;
}
void update(int p)
{
while (p <= m + 1)
{
t[p]++;
p += lowbit(p);
}
}
int qury(int p)
{
int res = 0;
while (p)
{
res += t[p];
p -= lowbit(p);
}
return res;
}
void solve()
{
cin >> n >> m;
vector<int> a(n + 1), Sr(n + 1), Sl(n + 1);
for (int i = 1; i <= n; i++)
{
cin >> a[i];
a[i] %= m;
Sr[i] = (Sr[i - 1] + a[i]) % m;
Sl[i] = Sl[i - 1] + Sr[i];
}
for (int r = 1; r <= n; r++)
{
ans += Sr[r] * r - Sl[r - 1];
int X = qury(m + 1) - qury(Sr[r] + 1);
ans += X * m;
update(Sr[r] + 1);
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}
比赛链接 https://atcoder.jp/contests/abc378
分类:
AtCoder
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效