AtCoder Beginner Contest 367
喜欢我
吗?
A#
#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;
using ll = long long;
int a, b, c;
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> a >> b >> c;
int ok = 0;
if(b < c) {
ok = a < b || a > c;
}
else {
ok = a > c && a < b;
}
cout << (ok ? "Yes" : "No");
return 0;
}
B#
#include<iostream>
int main() {
double x;
std::cin >> x;
std::cout << x;
return 0;
}
C#
#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;
using ll = long long;
int n, k, R[10], b[10];
void dfs(int i) {
if(i == n) {
if(accumulate(b, b + n, 0) % k == 0) {
for(int i = 0; i < n; ++ i) {
cout << b[i] << " \n"[i == n - 1];
}
}
return;
}
for(int x = 1; x <= R[i]; ++ x) {
b[i] = x;
dfs(i + 1);
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> k;
for(int i = 0; i < n; ++ i) cin >> R[i];
dfs(0);
return 0;
}
D#
第一遍处理不经过
第二遍处理经过
#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;
using ll = long long;
constexpr int N = 2e5 + 5;
int n, m, a[N];
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
for(int i = 1; i <= n; ++ i) {
cin >> a[i];
}
ll ans = 0; int s = 0;
map<int, int> mp;
++ mp[0];
for(int i = 1; i < n; ++ i) {
s = (s + a[i]) % m;
ans += mp[s] ++;
}
-- mp[0];
ans += mp[s = (s + a[n]) % m];
for(int i = 1, t = 0; i < n; ++ i) {
t = (t + a[i]) % m;
s = (s + a[i]) % m;
-- mp[t], ans += mp[s];
}
cout << ans;
return 0;
}
E#
倍增
#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;
using ll = long long;
constexpr int N = 2e5 + 5;
int n, a[N], pos[N][64]; ll k;
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> k;
for(int i = 1; i <= n; ++ i) cin >> pos[i][0];
for(int i = 1; i <= n; ++ i) cin >> a[i];
for(int j = 1; j <= 63; ++ j) {
for(int i = 1; i <= n; ++ i) {
pos[i][j] = pos[pos[i][j - 1]][j - 1];
}
}
for(int i = 1; i <= n; ++ i) {
int p = i;
for(int j = 0; j <= 63; ++ j) {
if(k >> j & 1) p = pos[p][j];
}
cout << a[p] << ' ';
}
return 0;
}
F#
值域很小。
设计一种能过判断集合相等的哈希:给每个数随机赋值 ull 范围整数,区间和代表哈希值。
#include<bits/stdc++.h>
#define eb emplace_back
#define ep emplace
using namespace std;
using ll = unsigned long long;
constexpr int N = 2e5 + 5;
int n, m; ll s[N], t[N];
map<int, ll> mp;
mt19937_64 rnd(time(0));
ll A(int l, int r) {return s[r] - s[l - 1];}
ll B(int l, int r) {return t[r] - t[l - 1];}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
for(int i = 1; i <= n; ++ i) {
int x; cin >> x;
if(!mp.count(x)) mp[x] = rnd();
s[i] = s[i - 1] + mp[x];
}
for(int i = 1; i <= n; ++ i) {
int x; cin >> x;
if(!mp.count(x)) mp[x] = rnd();
t[i] = t[i - 1] + mp[x];
}
while(m --) {
int l, r, L, R; cin >> l >> r >> L >> R;
cout << (A(l, r) == B(L, R) ? "Yes\n" : "No\n");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】