Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录

Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录

比赛连接
手速场,上蓝场,但是有点唐,C 想错了写了半个多小时,想到正解不到 \(10\) 分钟就写出来了,看到 D 后悔没先做 D 了,过于简单了。
赛时切掉了 A - D,也算是成功渡劫上蓝了!
过题记录:
image

A. FizzBuzz Remixed

很明显,\(\bmod 3 = \bmod 5\),首先要找 \(3\)\(5\) 的公倍数,然后找到下一个 \(\bmod 3 = 0\) 的地方,这中间取模为 \(0, 1, 2\) 的都是可以取的,因此循环节为 \(15\),每一个循环节内有三个满足答案的,因此我们先暴力算到一个 \(15\) 的倍数,然后再加上剩下的 \(/ 3\) 即可得到答案。

void solve()
{int n;cin >> n;int ans = 0;while(n % 15 != 0) {if(n % 15 <= 2) {ans ++;}n --;}ans ++;ans += n / 15 * 3;cout << ans << "\n";
}

B. Robot Program

很明显,按照题意,只要回到 \(0\),就重来,那只要回了一次 \(0\),后面的过程就是一个以 \(0\) 为起点的循环问题,因此只需要把初始起点第一次到达 \(0\) 的时刻找到,总时间减掉这个时刻,然后再计算一下从 \(0\) 作为起点下一次回到 \(0\) 的所需时间,用剩余时间除一下即可得到答案。(赛时代码写得有点shi,慎重观看)

void solve()
{int n, x, k;cin >> n >> x >> k;string s;cin >> s;int ans = 0;int cnt = 0;bool ck = false;if(x == 0)ck = true;if(x != 0) {for(auto &i : s) {cnt ++;if(i == 'L') {x --;} else {x ++;}if(x == 0) {ans ++;k -= cnt;ck = true;break;}} }if(!ck) {cout << 0 << '\n';return;}cnt = 0;ck = false;for(auto &i : s) {cnt ++;if(i == 'L') {x --;} else {x ++;}if(x == 0) {ck = true;break;}}if(!ck) {cout << ans << '\n';} else {ans += (k / cnt);cout << ans << '\n';}
}

C. Limited Repainting

赛时铸币卡了半个小时的一个题。
题目要我们求的是代价的最小值,而代价又是所有的不合法的点的最大值,那么这个题就是一个“找最大值的最小值”问题,考虑二分。
我们首先考虑两种颜色何时会被计入代价:

  • 蓝色:没有被染色。
  • 红色:被染成蓝色。
    一开始就是红色,我们又何时需要去把他变成蓝色呢?如果一个蓝色的点,和另一个蓝色的点,合并染色,可以减少一次染色次数,并且其间红色的代价更低,那么此时把红色染成蓝色就更优。
    也就是说,假设答案为 \(x\) 是满足的,那么大于 \(x\) 的也一定满足,因为如果 \(x\) 是满足的,那么此时错误颜色的最大值一定 \(\leq x\),那么对于所有大于 \(x\) 的,也可以用这种情况来满足,因此答案的可行性具有单调性,可以二分。
    我们对答案进行二分,检查每一个二分到的值 \(mid\) 是否合法,检查的时候,对于每一个大于 \(mid\) 的蓝色块,优先考虑能否向前合并减少染色次数(前面有蓝色的块并且途中的红色块的值都小于这个 \(mid\),那就可行),不可行就增加染色次数,看最后染色次数是否超过 \(k\)
void init() {for(int i = 1;i <= n;i ++) {vis[i] = false;}
}bool check(int x) {int cnt = 0;int mx = 0;bool ck = false;for(int i = 1;i <= n;i ++) {if(s[i] == 'R') {mx = max(mx, a[i]);} else if(a[i] > x){if(!ck)cnt ++;else if(mx > x)cnt ++;mx = 0;ck = true;}}return cnt <= k;
}void solve()
{cin >> n >> k;init();cin >> s;s = ' ' + s;int mx = 0;for(int i = 1;i <= n;i ++)cin >> a[i], mx = max(mx, a[i]);int l = -1, r = mx + 1;while(l + 1 != r) {int mid = l + r >> 1;if(check(mid))r = mid;else l = mid;}cout << r << '\n';
}

D. Tree Jumps

讲真我个人觉得 D 比 C 简单多了,当然也可能是我 C 实在是太蠢了。
D 题是一棵有根树,除了第二层的结点只能连接根外,每个结点都可以连接非父结点构成一个合法序列,问有多少种合法序列。
那这不就很明显的一个 BFS 序嘛,然后按 BFS 序进行 DP。
\(ans_i\) 为以 \(i\) 作为结尾的序列的合法序列数量,记 \(ad_i\) 为以第 \(i\) 层作为结尾的合法序列数,第一层和第二层的 \(ans_i\) 均为 \(1\),其余层的状态转移方程为 \(ans_i = ad_{d_{fa_i}} - ans_{fa_i}\)\(ad\) 数组把每一层的加起来就行,最后枚举每个结点的 \(ans_i\) 求和即可。

void dfs(int st) { //其实这个dfs完全没必要,直接bfs求就行,实时求一下每个结点的层数for(auto &i : g[st]) {d[i] = d[st] + 1;dfs(i);}
}void bfs(int st) {queue<int> q;q.push(st);while(q.size()) {int now = q.front();q.pop();for(auto &i : g[now]) {int pre = ans[now];int pred = ad[d[now]];if(now == 1) {ans[i] = pred % M;} else {ans[i] = (pred - pre) % M;}ad[d[i]] = (ans[i] + ad[d[i]]) % M;q.push(i);}}
}void init(int n) {for(int i = 0;i <= n;i ++) {g[i].clear();ans[i] = 0;ad[i] = 0;}
}void solve()
{int n;cin >> n;init(n);for(int i = 2;i <= n;i ++) {int x;cin >> x;g[x].push_back(i);}d[1] = 0;ans[1] = 1;ad[0] = 1;dfs(1);bfs(1);int res = 0;for(int i = 1;i <= n;i ++) {res = (res + ans[i]) % M;}cout << (res % M + M) % M << '\n';
}

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

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

相关文章

numpy知识点

1.点乘 .dot() 2.转置 .T 3.求逆矩阵np.linalg.inv() 4.拼接(返回变化后,但是并不对原来对象更改) np.concatenate((要拼接的ndarray对象),axis=按哪个维度拼接) axis=0 -->行增加 axis=1-->列增加 对于如果只有一个维度的ndarray,那么只能增加列,一直只有一行import…

销售必读!避免急躁,用这3个技巧轻松拿下客户

做销售,内心要急迫,但表面上不能着急。一旦着急,就会陷入被动,甚至在商业竞争中输得一败涂地。 不急于介绍产品,循序渐进 有些销售人员见到客户后,就像倒豆子一样,噼里啪啦地介绍产品功能、材质工艺,甚至是各种奇特设计,滔滔不绝。但他们从没想过,客户真的喜欢听这些…

如何判断大小端?

联合体成员低地址对齐方法一:联合体 #include <stdio.h> #include <malloc.h>union myunion {int a;char b; };int main(void) {union myunion test;test.a = 0x12345678; if (test.b == 0x78)printf("小端模式"); else if (test.b == 0x12)printf(&q…

hexo 本地启动项目 hexo-browsersync 不工作原因总结

问题 1 : hexo-server 开启 compress 压缩后 hexo-browsersync 插件热更新完全无效,没办法自动刷新 此问题表现在 hexo 任何版本 问题原因: hexo-server 依赖 compression^1.7.4 会自动安装 compression@1.8.0,压缩后 Content-Encoding 不是 gzip 而是 br, hexo-browsersy…

共振底选股思路和案例

当前时间: 2025年2月28日 主图中的所有提示都编写了选股指标,我无偿分享。 共振底选股思路: 在短线、中线均都向上的情况下,同时出现以下条件的两个以上,则为共振底。 1. 1025战法的低吸位附近出现止跌阳线。 2. 小底图形反包。 3. 泰乐KDJ副图指标显示【大进】、【逛进】…

Vue2/Vue3 项目生产环境开启 vue devtools 插件线上调试 vue 组件

说到 vue 项目的调试工具,必然少不了 “vue devtools 插件”,此插件就像“手术刀”一样,是开发环境下的一个利器,生产环境一般情况没办法使用。 要在生产环境使用,就必须要一点手段。前置条件安装 Chrome 浏览器,本文编写时使用的 Google Chrome 133 版本。 安装 vue dev…

Windows编程系列:获取系统BIOS信息

在前面的文章中,介绍过WMI的使用 https://www.cnblogs.com/zhaotianff/p/14764740.html在Win32 Provider下面提供了一个Win32_BIOS类,可以获取BIOS信息我们还可以通过SMBIOS标准规范来获取BIOS信息SMBIOS介绍 SMBIOS (System Management BIOS ,系统管理BIOS)是通过系统固件…

【大模型安全】大模型攻击测试案例分析

本节通过对实际案例的研究,直观展示大模型(LLM)攻击测试是如何识别模型中存在的安全隐患。为确保被测大模型系统的安全运行,我们仅执行了无危害的查询操作,目的是发现潜在的安全漏洞和风险点。 案例1: 某互联网厂商LLM存在远程代码执行漏洞(过度代理),攻击者可通过此漏…

谷歌 Chrome 浏览器离线安装 vue devtools 插件

由于某些原因,Chrome 应用商店访问不了,所以只能离线安装 vue devtools 插件,离线安装也有两种方法。 方法一:自编译 vue devtools 插件 这方法要求动手能力强的同学。前往 github 下载 vue devtools 插件源码(https://github.com/vuejs/devtools)。在本地编译源码。编译成…

CRM选型避坑指南:别踩这些常见雷区!

选CRM就像找工作,选错了不仅折腾自己,还浪费时间和钱。 市面上CRM那么多,花里胡哨的功能一堆,价格跨度也大,选起来就像进了迷宫,一不小心就掉坑里。所以今天就聊聊那些常见的选型雷区,教你如何避开这些坑,选到真正适合自己的CRM!这里整理好了最好用CRM系统——简道云 …

医院HIS系统通过互联网调用医保内网(专网)接口

前言其实更准确的主题应该为:如何通过互联网访问专网服务器的http 服务,因为原理是一样的。全国医保刚实行升级时,很多HIS开发人员通过远程医院前置机再跳转医保网进行调试,操作很麻烦,如果能在办公室通过互联网直接访问医保网那就太方便了。全国医保的接口都是通过http方…

No.26 JavaScript--简介

前端3件套:HTML CSS JS 一、JS简介JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序的“脚本”。 JavaScript 是一种嵌入式(embedded)语言。它本身提供的核心语法不算很多。1.为什么学JS操控浏…