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

news/2025/10/12 17:33:36/文章来源:https://www.cnblogs.com/williamYcY/p/19136898

题面

A. Regular Bracket Sequence

【题面】

给定一个长度为 \(n\) 的序列 \(S\),其中有包括 (),和 ?。问如果可以把 ? 变成 ( 或者 ),是否可以把序列 \(S\),变成括号序列。 保证存在一个左括号和一个右括号

【思路】

  1. 首先考虑到如果说字符串的长度为奇数那么这个序列一定不能成为括号序列。
  2. 对于任意数量的括号只要满足第一个不是左括号,最后一个不是右括号即可。
    n比较小可以考虑二进制枚举

【实现】

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline int read(){int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ x = x * 10 + (ch ^ 48); ch = getchar(); }return x * f;
}
void solve(){string s;cin >> s;int n = s.size();s = " " + s;if(n % 2 == 1 || s[1] == ')' || s[n] == '('){cout << "No\n";return ;}cout << "Yes\n";
}
int main(){int T = read();while(T--){solve();}return 0;
}

B. Red and Blue

【题面】

给定一个长度为 \(n+m\) 的数组 \(a\),把数组 \(a\) 分成两个长度分别为 \(n\)\(m\) 的数组 \(r\)\(b\)。重新组合 \(r\)\(b\) 满足 \(r_i\)\(b_i\) 在原数组中的相对位置不变。
\(f(a)\) 的最大值:

\[f(a) = \max(0, a_1, (a_1 + a_2), (a_1 + a_2 + a_3), \dots, (a_1 + a_2 + a_3 + \dots + a_{n + m})) \]

【思路】

1.首先根据样例,可以发现贪心(每一次取最大值)是错误的。
2.可以发现 \(n\)\(m\) 的大小很小,所以可以考虑一个 \(O(nm)\) 的算法。
3.考虑 \(dp\),定义 \(dp_{i,j}\) 表示在前 \(i\)\(r_i\) 和 前 \(j\)\(b_j\) 中的最大 \(f(a)\),那么
\(dp_{i+1,j} = \max(dp_{i+1,j},dp_{i,j}+r_i)\)
\(dp_{i,j+1} = \max(do_{i,j+1},dp_{i,j}+b_i)\)
\(dp_{0,0}=0\)

【实现】

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline int read(){int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ x = x * 10 + (ch ^ 48); ch = getchar(); }return x * f;
}
const int N = 105;
ll dp[N][N];
void solve(){int n = read();vector<int>a(n+1);for(int i=1; i<=n; ++i){a[i] = read();}int m = read();vector<int>b(m+1);for(int i=1; i<=m; ++i){b[i] = read();}for(int i=0; i<=n; ++i){for(int j=0; j<=m; ++j){dp[i][j] = INT_MIN;}}dp[0][0] = 0;ll ans = INT_MIN;for(int i=0; i<=n; ++i){for(int j=0; j<=m; ++j){if(i<n)dp[i+1][j] = max(dp[i+1][j], dp[i][j] + a[i+1]);if(j<m)dp[i][j+1] = max(dp[i][j+1], dp[i][j] + b[j+1]);ans = max(ans, dp[i][j]);}}cout << ans << '\n';
}
int main(){int T = read();while(T--){solve();}return 0;
}

C. Building a Fence

【题面】

给定 \(n\) 个栅栏其中每一个栅栏的区间 \([l_i..r_i]\)。其中第 \(i\) 个区间的 \(l_i\) 要求必须 \(\geq h_i\)。如果每一个相邻的栅栏必须有长度至少为 \(1\) 的相交区间,问是否存在这种情况

【思路】

1。发现每一个栅栏的区间 \([l_i..r_i]\) 只跟上一个栅栏和 \(h_i\) 有关。
2.可以用一个线性复杂度的算法去把计算每一个栅栏区间的最低值和最大值,最后取一个交集即可。

【实现】

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline int read(){int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ x = x * 10 + (ch ^ 48); ch = getchar(); }return x * f;
}
void solve(){ll n = read(), k = read();vector<ll>h(n+1), l(n+1), r(n+1);for(int i=1; i<=n; ++i){h[i] = read();}l[1] = r[1] = h[1];for(int i=2; i<=n; ++i){if(h[i] +k-1< l[i-1] -k+1|| h[i] >= r[i-1] + k){cout << "No\n";return;}l[i] = max(h[i], l[i-1] + 1 - k);r[i] = min(h[i] + k-1, r[i-1] + k - 1);if(l[i] > r[i]){cout << "No\n";}}if(l[n] <= h[n] && h[n] <= r[n]){cout << "Yes\n";}else{cout << "No\n";}
}
int main(){int T = read();while(T--){solve();}return 0;
}

D. Ceil Divisions

【题面】

您有一个数组 \(a_1,a_2,...,a_n\) ,其中 \(a_i=i\)

在一个步骤中,您可以选择两个索引 \(x\)\(y\) ( \(x \neq y\) ),并设置 \(a_x = \left\lceil \frac{a_x}{a_ y} \right\rceil\)
您的目标是在不超过 \(n + 5\) 的步骤中使数组 \(a\)\(n - 1\)\(1\) 组成。注意,您不必最小化步骤数。

【思路】

1.首先可以发现对于任意 \(n\)\(m\),如果 \(n < m\) 那么 \(\lceil \frac{n}{m} \rceil = 1\)
2.可以把构造出把 \(3\)\(n-1\) 都去除以 \(n\) 这样 \(a\) 就变成了 \(1,2,1,1,...,1,n\)那么只用考虑把 \(n\) 变成 1即可。但是发现如果要把 \(n\) 变成 \(1\),此时需要 \(\log n\) 此次,绝对会超时。
3.考虑要让 \(\frac{n}{p_1·p_2·p_3·...·p_k}\) 要让 \(k\) 尽量少。由于考虑到 \(n\) 是从 \(1\)\(n\) 中最大的,所以让 \(k\) 不能是 \(1\),最小只能是 \(2\)。有由于每一次的可以删去 \(p_2..n\)。那么尽量让 \(\lvert p_1 - p_2 \rvert\) 最小,就干脆让 \(p_1 = p_2\) 那么就让 \(n=\frac{n}{\sqrt n}\)

【实现】

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline int read(){int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); }while(ch >= '0' && ch <= '9'){ x = x * 10 + (ch ^ 48); ch = getchar(); }return x * f;
}
void solve(){ll n = read();vector<pair<ll, ll> > ans;for(ll i = n; i >=3; --i){ll cnt = ceil(sqrt(i));for(ll j = cnt+1; j<i; ++j){ans.push_back({j, i});}ans.push_back({i, cnt});ans.push_back({i, cnt});i = ++cnt;}cout << ans.size() << '\n';for(auto x : ans){cout << x.first << ' ' << x.second << '\n';}
}
int main(){int T = read();while(T--){solve();}return 0;
}

E. A Bit Similar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7下docker的jenkins下载并配置jdk与maven

在CentOS 7环境下,通过Docker部署Jenkins并为其配置Java Development Kit (JDK) 与Apache Maven,是构建持续集成/持续部署(CI/CD)环境的常见步骤。下面是详细的操作指南,旨在帮助您顺利完成这一过程。 步骤1: 安装D…

The 2024 ICPC Asia Shanghai Regional Contest

Preface 马上要 25 年 Regional 了才猛然发现去年的 IC Regional 还有上海和杭州两场没 VP 过,最近找机会补了 这场前期我和祁神在签到题 C 上坐牢一小时,本来以为要崩了,结果中期题做的还都挺顺 最后 4h 的时候过了…

英语_阅读_Fireflies_待读

Imagine you are in a field at night, and suddenly, you see lots of little lights around you. 想象一下,你在一个夜晚的田野中,突然看到周围有许多小小的光点。 You have just found a gathering of fireflies,…

深入解析:RoadCLIP 笔记 针对自动驾驶优化的 CLIP 变体 vlm

深入解析:RoadCLIP 笔记 针对自动驾驶优化的 CLIP 变体 vlmpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

ASP.NET Razor VB 变量 - 实践

ASP.NET Razor VB 变量 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

深入解析:【Day 66】Linux-Zabbix监控

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

dos命令和命令提示符

打开命令提示符 方式开始菜单 win键+r 输入cmd打开 在任意文件下面,按住shift键+鼠标右键,选择在此处打开命令行窗口 资源管理器的地址栏前面加上 cmd 路径管理员方式运行 打开菜单找到命令提示符,右键选择以管理员…

27. 移除元素 暴力+快慢指针+相向双指针

27. 移除元素 1、暴力 解题过程 外层循环遍历nums数组,当遇到等于val的元素时,进入内层循环将后续元素均前移一位,覆盖前一个元素。 时间复杂度: O(n^2) 空间复杂度: O(1) class Solution {public int removeElemen…

ST表学习笔记

前置知识:倍增 其实倍增就是二进制拆分,因为有的数可能很大,我们按照2的幂次去查询,就能用 \(log_2n\) 的时间复杂度求解 ST 表 创建 ST 表运用的是倍增思想,我们可以用 \(O(nlogn)\) 的时间创建一个二维表,根据…

谈一类易实现的非四毛子线性 RMQ

考虑设 \(B=64\),每 \(64\) 个元素分一块。 处理跨块查询 这样的查询,是由一段的后缀拼上若干整块拼上一段前缀。 因此我们维护每个块的前后缀最值以及将每一块的最值拿出建立 \(ST\) 表。 复杂度 \(O(n+\frac{n}{B}…

我们学会在具体情境中做出恰当判断

当前AI的"情感"本质是数据驱动的符号运算。虽然能通过分析人类表情、语言模式生成"合理"回应,但缺乏神经递质调节和生物电信号支持5。例如,AI可以模仿安慰人的语言,却不会因共情而失眠,也不会…

【教程】无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱

无需第三方应用,Windows自带邮箱如何绑定QQ邮箱等第三方邮箱前言 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www.cnblogs.com/hassle微软的 Outlook 按下win键弹出搜索栏,搜索栏输入邮件就会弹…

ubuntu默认桌面解决vnc灰屏

ubuntu默认桌面解决vnc灰屏一、安装vncserver sudo apt-get install tightvncserver 二、创建/关闭端口 # 创建端口 vncserver :1 -geometry 1920x1000 -depth 24# 关闭端口 vncserver -kill :1 三、解决VNC连接后灰…

2025婚纱摄影影楼权威推荐榜:专业团队与创意拍摄打造梦幻婚礼

随着婚庆行业的不断发展,越来越多的新人开始注重婚纱照的质量和创意。选择一家专业的婚纱摄影影楼,不仅能够记录下美好的瞬间,还能为婚礼增添更多浪漫与回忆。为了帮助筛选婚纱照哪家影楼更专业品牌,特此发布权威推…

分布式结构化存储系统-HBase访问方式

分布式结构化存储系统-HBase访问方式 HBase提供了多种访问方式,包括HBase shell,HBase API,数据收集组件(比如Flume,Sqoop等),上层算框架以及Apache Phoenix等,本篇博客将详细介绍这几种方式。 一.HBase Shell…

智能(embodied AI)、机器人视觉 + 交互、边缘 AI

智能(embodied AI)、机器人视觉 + 交互、边缘 AI智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embodied AI)、机器人视觉 + 交互、边缘 AI 智能(embo…

【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法

问题描述 使用 Azure API Management(APIM)时,需要记录每个 API 请求的 Header 和 Body,以便进行问题排查和审计,如何配置才能完整捕获这些信息呢?问题解答 在配置API的时候,启用 trace 策略来收集 inbound / …

[JAVA]JDK多版本设置

[JAVA]JDK多版本设置windows环境背景: 经常会遇到不同项目,需要不同版本的jdk版本,每次都需要手工修改环境变量 我这里遇到需要分别使用jdk1.8和jdk17解决: 通过bat设置好版本,通过脚本实现反复快速修改。 @echo …

Google Veo3生成跳舞视频

Google Veo3生成跳舞视频背景 Google Veo 3 是谷歌 DeepMind 于 2025 年 5 月推出的第三代 AI 视频生成模型,在视听同步、画质表现、创作控制等方面实现了显著突破, 视听协同生成 原生音频同步技术:支持文本或图…