Educational Codeforces Round 175 (Rated for Div. 2)
A. FizzBuzz Remixed
题意:求
我是打表发现每15个数的开头3个数满足要求。
点击查看代码
void solve() {
int n;
std::cin >> n;
std::cout << n / 15 * 3 + std::min(n % 15 + 1, 3) << "\n";
}
B. Robot Program
题意:坐标轴上从起点按照给定指令序列按顺序执行,如果到了0这个位置就从头开始执行指令,问
点击查看代码
void solve() {
i64 n, x, k;
std::cin >> n >> x >> k;
std::string s;
std::cin >> s;
i64 ans = 0;
for (int i = 0; x != 0 && i < n && k; ++ i) {
-- k;
if (s[i] == 'L') {
-- x;
} else {
++ x;
}
}
if (x == 0) {
++ ans;
for (int i = 0; i < n; ++ i) {
if (s[i] == 'L') {
-- x;
} else {
++ x;
}
if (x == 0) {
ans += k / (i + 1);
break;
}
}
}
std::cout << ans << "\n";
}
C. Limited Repainting
题意:一个序列初始都是R,每个位置有一个价值。你可以选择
二分答案,如果
点击查看代码
void solve() {
int n, k;
std::cin >> n >> k;
std::string s;
std::cin >> s;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
auto check = [&](int x) -> int {
std::vector<int> b(n);
for (int i = 0; i < n; ++ i) {
if (s[i] == 'B') {
b[i] = 1;
} else if (s[i] == 'R' && a[i] <= x) {
b[i] = 1;
}
}
int cnt = 0;
for (int i = 0; i < n; ++ i) {
if (b[i] == 1) {
int j = i;
bool flag = s[i] == 'B' && a[i] > x;
while (j + 1 < n && b[j + 1] == 1) {
++ j;
flag |= s[j] == 'B' && a[j] > x;
}
if (flag) {
++ cnt;
}
i = j;
}
}
return cnt <= k;
};
int l = 0, r = 1e9;
while (l < r) {
int mid = l + r >> 1;
if (check(mid)) {
r = mid;
} else {
l = mid + 1;
}
}
std::cout << l << "\n";
}
D. Tree Jumps
题意:给你一棵树,根可以到其中任意一个儿子,但从深度为2的点开始,每个点只能去深度比它大一的点,且这个点不是它到儿子。求从根开始的不同路径树。
类似
代码省略了取模类
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<std::vector<int>> adj(n);
std::vector<int> p(n);
for (int i = 1; i < n; ++ i) {
std::cin >> p[i];
-- p[i];
adj[p[i]].push_back(i);
}
std::vector<int> d(n);
std::vector<std::vector<int>> g(n);
auto dfs = [&](auto self, int u) -> void {
g[d[u]].push_back(u);
for (auto & v : adj[u]) {
d[v] = d[u] + 1;
self(self, v);
}
};
dfs(dfs, 0);
std::vector<Z> f(n);
Z sum = 0;
for (auto & u : adj[0]) {
f[u] = 1;
sum += 1;
}
Z ans = sum + 1;
for (int i = 2; i < n; ++ i) {
Z t = 0;
for (auto & u : g[i]) {
f[u] = sum - f[p[u]];
t += f[u];
}
sum = t;
ans += t;
}
std::cout << ans << "\n";
}
E. Game with Binary String
题意:
首先
于是我们记录每个前缀的值
点击查看代码
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;
std::cin >> n;
std::string s;
std::cin >> s;
const int D = 3 * n + 10;
std::vector<int> sum(n + 1);
sum[0] = D;
for (int i = 0; i < n; ++ i) {
sum[i + 1] = sum[i] + (s[i] == '0' ? 1 : -3);
}
Fenwick<int> tr(D * 2);
tr.add(sum[0], 1);
i64 ans = 0;
for (int i = 1; i <= n; ++ i) {
ans += tr.sum(sum[i] + 1, sum[i] + 1);
ans += tr.query(sum[i] - 2);
tr.add(sum[i], 1);
}
std::cout << ans << "\n";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!