题目链接:Educational Codeforces Round 168 (Rated for Div. 2)

总结:题目较简单,但是发挥很一般。A,B题一直读假题,卡了半个小时;C题用char存int,难绷了。

A. Strong Password

tag:模拟

void solve() {
string s;
cin >> s; for (int i = 1; i < s.size(); i ++) {
if (s[i] == s[i - 1]) {
cout << s.substr(0, i) << (s[i] == 'a' ? 'b' : 'a') << s.substr(i) << "\n";
return;
}
}
s += s.back() == 'a' ? 'b' : 'a';
cout << s << "\n";
}

B. Make Three Regions

tag:模拟

void solve() {
int n;
cin >> n; string s[2];
cin >> s[0] >> s[1]; int ans = 0;
for (int i = 1; i < n - 1; i ++) {
for (int j = 0; j < 2; j ++) {
if (s[j][i] == '.' && s[j][i - 1] == '.' && s[j][i + 1] == '.' && s[j ^ 1][i] == '.' && s[j ^ 1][i - 1] == 'x' && s[j ^ 1][i + 1] == 'x') {
ans ++;
}
}
}
cout << ans << "\n";
}

C. Even Positions

tag:思维

Description:给定一个括号序列,奇数位用\(\_\)表示,对于一个括号序列的花费为\((xxxx)\):\(r - l\),你需要将其还原为花费最少的合法序列。

Solution:先考虑如何还原,我们定义\(x\)为当前\((\)的数量,\(y\)为\()\)的数量,当\(x <= y\)时,我们填\((\),否则填\()\)。

  • 考虑如何计算答案,使用\(stack\),存储\((\)的下标,遇到\()\)时,弹出栈顶比计算答案。
void solve(){
cin >> n;
string s;
cin >> s;
int x = 0, y = 0;
s = "$" + s;
for (int i = 1; i <= n; i ++){
if (s[i] == '(')
x ++;
else if (s[i] == ')')
y ++;
else{
if (x <= y)
s[i] = '(', x ++;
else
s[i] = ')', y ++;
}
}
int ans = 0;
stack<int> st;
for (int i = 1; i <= n; i ++){
if (s[i] == '('){
st.ep(i);
continue;
}
else{
int t = st.top();
st.pop();
ans += (i - t);
}
} cout << ans << endl;
}

D. Maximize the Root

tag:dfs

Description:给定一个由\(n\)个节点组成的树,每个点的权值为\(a_i\)。可以执行任意次一下操作:

  • 选择一个有子节点的节点\(v\),将\(v\)加\(1\),其余所有子节点\(-1\)。但是所有值必须大于等于零。
  • 求根节点的最大可能值。

Solution:模拟操作发现,对于非根节点的最大值

  • 如果其值大于所有子节点,那么该值的贡献为子节点中的最小值。

  • 如果该值小于子节点中的最小值,那么该值最大贡献为\((a_i + mi) / 2\)。

  • 对于根节点,只需要加上其子节点的最小值即可。

void solve(){
cin >> n;
vector g(n + 1, vector<int>());
vector<int> a(n + 1); for (int i = 1; i <= n; i ++)
cin >> a[i];
for (int i = 2; i <= n; i ++){
int x;
cin >> x;
g[x].eb(i);
g[i].eb(x);
} auto dfs = [&](auto dfs, int v, int u) -> int{
int res = a[v];
int t = -1;
for (auto i : g[v]){
if (i == u)
continue;
if (t == -1)
t = dfs(dfs, i, v);
else
t = min(t, dfs(dfs, i, v));
}
if (v == 1){
return a[1] += t;
}
if (t == -1)
return res;
if (t <= res)
return a[v] = t;
else{
return a[v] = (res + t) / 2;
}
};
cout << dfs(dfs, 1, -1) << endl;
}

E. Level Up

tag:二分 + 树状数组

Description:有一个长度为\(n\)的序列\(a\),和整数\(x, k\),初始时\(x == 1\)。

  • 一次操作为:从\(1 -> n\)一次判断,每\(k\)次满足\(a_i >= x\),\(x ++\)。

  • 现在有\(q\)次询问,每次询问给定\(i, t\),求当\(k == t\),操作执行到\(i\)时,\(a_i\)是否大于等于\(x\)。

  • \(1 <= n, q <= 2*10^5, 1 <= a_i <= 2*10^5\)

Solution:没有修改操作,首先考虑预处理

  • 我们先考虑\(k\)与\(x\)的关系,显然\(k\)越小\(x\)越大,那么对于每一个\(a_i\),我们可以二分得到一个最小的\(b_i\),使得\(k == b_i\)时,\(a_i >= x\)。但是对每个数处理的时间复杂度为\(O(nlogn)\),总的时间复杂度为\(O(n^2logn)\)
  • 考虑如果优化check函数,对于每一个\(mid\),我们需要知道前面\(i - 1\)个数执行的操作次数。并且我们已经得到\(b_1到b_{i - 1}\),如果\(mid >= b_j\),那么在第\(j\)个数就需要执行操作。因此我们使用树状数组维护前\(i - 1\)个怪物的\(b_i\)值。
  • 对于每一个\(mid\),我们只需要知道前面有多少个\(b_i\)小于等于\(mid\)即可。
int tr[N];

int lowbit(int x){
return x & -x;
} void add(int x, int c){
for (int i = x; i <= n; i += lowbit(i))
tr[i] += c;
} LL sum(int x){
LL res = 0;
for (int i = x; i > 0; i -= lowbit(i))
res += tr[i];
return res;
} LL aks(int l, int r){
return sum(r) - sum(l - 1);
} void solve(){
int q;
cin >> n >> q;
vector<int> a(n + 1), b(n + 1);
for (int i = 1; i <= n; i ++){
cin >> a[i];
} for (int i = 1; i <= n; i ++){ // 初始化
int l = 0, r = i + 1;
while (l + 1 < r){
int mid = l + r >> 1;
if (sum(mid) / mid + 1 > a[i])
l = mid;
else
r = mid;
}
b[i] = r;
add(b[i], 1);
} while (q --){
int i, x;
cin >> i >> x;
if (x < b[i])
cout << "NO\n";
else
cout << "YES\n";
}
}

Educational Codeforces Round 168 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  2. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  3. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  4. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  5. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

  6. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  7. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  8. Educational Codeforces Round 39 (Rated for Div. 2) G

    Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...

  9. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  10. Educational Codeforces Round 60 (Rated for Div. 2) 题解

    Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...

随机推荐

  1. 云开发实践:从 0 到 1 带你玩 AI

    今天我们将深入分析云开发的 AI 能力.这次的讨论焦点不再是之前提到的云端IDE编写代码的能力,而是更为广泛和实际的内容--如何利用云平台提供的各种模块化能力,快速高效地开发.今天的主题依然围绕AI展 ...

  2. ThreeJs-01开发环境搭建

    写在前面,好久不见各位,之前一段时间因为一些事情有点忙,但从未停止学习的脚步,也屯了很多笔记,会在未来的时间慢慢发出来,从今天开始一起进入WebGis,threeJs目前大前端发展的一个方向开始学习, ...

  3. 浅析REGEXP_SUBSTR,PRIOR,CONNECT BY

    业务场景 teacher表中的tech_class字段存储的是每个老师所教授的课程,课程之间以英文逗号分隔.现在要用语句统计每个课程对应的教师数量.语句及效果如下: 语句其实很简单,各种博客或者gpt ...

  4. 【处理元组有关的题型的技巧】codeforces 1677 A. Tokitsukaze and Strange Inequality

    题意 第一行输入一个正整数 \(T(1 \leq T \leq 1000)\),代表共有 \(T\) 组测试用例,对于每组测试用例: 第一行输入一个正整数 \(n(4 \leq n \leq 5000 ...

  5. Microsoft Build 2022 专家对话

    Microsoft Build 2022 专家对话 Build 2022 专家对话地址:https://mybuild.microsoft.com/en-US/sessions/81056450-6f ...

  6. git恢复到之前提交的记录

    项目搞崩了,还提交上去了怎么办? 那当然是恢复到之前的提交记录了,那怎么操作呢? 首先,到代码托管平台找到你想恢复的提交记录(在此以github为例) 获取 commit id 首先,通过如下图操作获 ...

  7. 【Web前端】【开源分享】H5登陆界面 - 2021年12月24日

    点我下载

  8. 使用OpenSSL创建生成CA证书、服务器、客户端证书及密钥

    说明: 对于SSL单向认证:服务器需要CA证书.server证书.server私钥,客户端需要CA证. 对于SSL双向认证:服务器需要CA证书.server证书.server私钥,客户端需要CA证书, ...

  9. @EnableWebMvc 注解会让Swagger无效访问的问题

    在工作中,通过Swagger2对项目的controller进行配置,以便于用户测试restful服务接口提高开发效率. 但是今天却出现了一个让我匪夷所思的问题就是在配置类里面加上@EnableWebM ...

  10. Qt音视频开发03-ffmpeg倍速播放(半倍速/2倍速/4倍速/8倍速)

    一.前言 用ffmpeg做倍速播放,是好多年都一直没有实现的功能,有个做法是根据倍速参数,不断切换播放位置,实现效果不是很好,ffplay中的倍速就做得很好,而且声音无论倍速多少还非常柔和,有特别的降 ...