Educational Codeforces Round 185 (Rated for Div. 2) 记录

news/2025/11/29 16:16:48/文章来源:https://www.cnblogs.com/xxx2022/p/19286780

Educational Codeforces Round 185 (Rated for Div. 2) 记录

糖丸的一场,早早三个题但是没把D的啥比错误看出来,赛后B因为不开long long 见祖宗了。

A

可以贪心地取右下的几个可能作为答案的点,但是由于数据范围较小,暴力求解也可以通过。

B

由于需要求的是 \(r-l+1\) 的最大值,所以我们只需要关心第一步操作最大能是多少。

而假设第一步操作对一个长度为 \(len\) 的区间合法操作,那么后续可以通过恰好 \(n-1\) 步操作把 \(a\) 变成 \(b\) 等价于 \(\sum{b_i}-len \ge n-1\)

将数组 \(b\) 排序并去 \(0\) 后枚举第一步操作的长度即可。

C

注意到题目中其实给出了一个标准的带余除法的形式,稍加转化即可变为:

\[x=yq_i+r_j \]

其中 \(1 \le y \le x \le k\) ,那么我们保证 \(y < r_j\) 的情况下 \(x\) 尽量小是比较优的。因此取 \(y=r_j-1\) ,那么一组 \(q_i,r_j\)合法等价于:

\[(r_j-1)q_i+r_j \le k \]

注意到左边式子的值随 \(r_j,q_i\) 的增大而增大,所以贪心地对于每个较大的 \(r_j\) 匹配较小的 \(q_i\) 即可,使用双指针维护,时间复杂度 \(O(n)\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int T;
const int N=2e5+10;
int n,k;
int q[N],rr[N];
void solve(){cin>>n>>k;for(int i=1;i<=n;i++){cin>>q[i];}for(int i=1;i<=n;i++){cin>>rr[i];}sort(q+1,q+n+1);sort(rr+1,rr+n+1);int l,r;l=1,r=n;int ans=0;while(l<=n && r>=1){if(q[l]*(rr[r]+1)+rr[r]<=k){l++;r--;ans++;}else{r--;}}cout<<ans<<'\n';
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>T;for(int i=1;i<=T;i++){solve();}return 0;
}

D

注意到当有 \(\text{I}\) 的时候填 \(\text{I}\) 是优的,所以可以先假设所有 \(\text{?}\) 处都被填为了 \(\text{I}\) ,那么就需要考虑在 \(\text{I}\) 不够用的时候将其替换为 \(\text{X,V}\) 即可。这里 \(\text{X,V}\) 除了值不一样没有本质不同,所以可以放在一起考虑,有 \(\text{V}\) 的时候优先填 \(\text{V}\) ,没了再填上 \(\text{X}\)

接下来再考虑怎么填比较优。这里我们可以把这个串中各个连续的问号段拉出来一个个单独考虑,因为 \(\text{I}\) 的值只受其后面一个字符影响,各个被非问号字符隔开的连续问号段并不能相互影响。此时观察一下可以发现每一个问号存在三类情况:

\(case1: III\) (中间的 \(\text{I}\) ,下同)

$case2: IIX $ 或 \(XII\)

\(case3: XIX\)

其中的 \(\text{X}\) 均可以由 \(\text{V}\) 替代。

对于第一类点,假设将其值变为 \(x\) ,对答案的影响为 \(x-1-2=x-3\)

同理第二类为 \(x-1\) ,第三类为 \(x+1\)

因此转换顺序为一类点-二类点-三类点。

此时则会出现一个问题,在转化过程中点的类型可能会发生变化。这个只需先将一类点标记完再考虑二类点,剩下的均化为三类点即可。

而对于各个连续问号段,我们还需要讨论它两边字符的值才能计算其中各类点的数量。

\(case1:\) 两边均为 \(\text{I}\):此时一类点为从第一个问号开始隔一个取一个,若长度为偶数则最后一个点位二类点,其余为三类点,各个类型的点的数量即为:

\[s_1= \lceil \frac{len}{2} \rceil \]

\[s_2= [len \mod 2=0] \]

\[s_3=len-s_1-s_2 \]

其余情况也同理。

\(case2:\) 两边其中一个不为 \(\text{I}\), 此时

\[s_1= \lfloor \frac{len}{2} \rfloor \]

\[s_2= [len \mod 2=1] \]

\[s_3=len-s_1-s_2 \]

\(case3:\) 两边均不为 \(\text{I}\), 此时

\[s_1= \begin{cases} \lfloor \frac{len}{2} \rfloor & len \mod 2=1 \\ \frac{len}{2}-1 & len \mod 2=0 \end{cases} \]

\[s_2= [len \mod 2=0] \]

\[s_3=len-s_1-s_2 \]

先预处理出各种点的数量,询问时将多出的被 \(\text{I}\) 覆盖的问号点分配给 \(\text{X,V}\) 即可,时间复杂度 \(O(n)\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e5+10;
int T;
int n,q;
char s[N];
void solve(){cin>>n>>q;for(int i=1;i<=n;i++)   cin>>s[i];int s1=0;int s2=0;int s3=0;int res=0;int ss=0;for(int i=1;i<=n;i++){if(s[i]=='X')   res+=10;else if(s[i]=='V')  res+=5;else{if(i+1<=n && (s[i+1]=='X' || s[i+1]=='V'))  res--;else    res++;}if(s[i]=='?')   ss++;}s[n+1]='I';s[0]='X';int ss1,ss2,ss3;for(int i=1;i<=n;i++){if(s[i]=='?'){int j=i;while(s[j]=='?')    j++;j--;int len=j-i+1;ss1=ss2=ss3=0;// cout<<i<<" "<<j<<'\n';if(s[i-1]=='I' && s[j+1]=='I'){ss1+=len/2+((len&1)?1:0);ss2+=(len&1)?0:1;ss3+=len-ss1-ss2;}else if(s[i-1]=='I'){ss1+=len/2;ss2+=(len&1);ss3=len-ss1-ss2;}else if(s[j+1]=='I'){ss1+=len/2;ss2+=(len&1);ss3+=len-ss1-ss2;}else{if(len&1){ss1=len/2;ss3=len-ss1;}else{ss1=len/2-1;ss2=1;ss3=len-ss1-ss2;}}// cout<<ss1<<" "<<ss2<<" "<<ss3<<'\n';s1+=ss1;s2+=ss2;s3+=ss3;// cout<<s1<<" "<<s2<<" "<<s3<<'\n';i=j;}}// cout<<s1<<" "<<s2<<" "<<s3<<'\n';// cout<<res<<'\n';ss1=s1,ss2=s2,ss3=s3;while(q--){int cx,cy,cz;cin>>cx>>cy>>cz;int ans=res;if(cz>=ss){cout<<ans<<'\n';continue;}s1=ss1,s2=ss2,s3=ss3;int now=ss-cz;if(cy<=now){now-=cy;if(cy>=s1){cy-=s1;ans+=s1*2;s1=0;}else{ans+=cy*2;s1-=cy;cy=0;}if(cy>=s2){cy-=s2;ans+=s2*4;s2=0;}else{ans+=cy*4;s2-=cy;cy=0;}if(cy>=s3){cy-=s3;ans+=s3*6;s3=0;}else{ans+=cy*6;s3-=cy;cy=0;}// cout<<"ok "<<ans<<'\n';if(now>=s1){now-=s1;ans+=s1*7;s1=0;}else{ans+=now*7;now-=s1;now=0;}if(now>=s2){now-=s2;ans+=s2*9;s2=0;}else{ans+=now*9;s2-=now;now=0;}if(now>=s3){now-=s3;ans+=s3*11;s3=0;}else{ans+=now*11;s3-=now;now=0;}cout<<ans<<'\n';}else{if(now>=s1){now-=s1;ans+=s1*2;s1=0;}else{ans+=now*2;s1-=now;now=0;}if(now>=s2){now-=s2;ans+=s2*4;s2=0;}else{ans+=now*4;s2-=now;now=0;}if(now>=s3){now-=s3;ans+=s3*6;s3=0;}else{ans+=now*6;s3-=now;now=0;}cout<<ans<<'\n';}}
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>T;for(int i=1;i<=T;i++){solve();}return 0;
}

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

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

相关文章

工业级MOS管并联应用与可靠性设计深度解析-ASIM阿赛姆

一、工业场景并联应用的必要性 在工业自动化领域,单颗MOS管难以满足大功率电机驱动、通信电源等高电流场景需求。某品牌伺服驱动器实测数据显示,当输出电流超过30A时,单管导通损耗急剧上升,结温超出安全裕度。并联…

2025年小红书免费去水印TOP榜单:7款工具真实体验

随着短视频内容创作的蓬勃发展,小红书已成为年轻人分享生活方式、获取灵感的核心平台,美妆教程、旅行攻略、穿搭分享等优质内容层出不穷。然而,平台自带的水印不仅影响内容的美观度,也给二次创作和素材整理带来不便…

中医师承选哪个机构靠谱?来自江苏学员的三年备考机构深度比较

中医师承选哪个机构靠谱?有没有人能分享下真实的对比经历? 来自一位江苏学员的三年备考经验,想分享我在选择机构前后经历的所有选择与判断。 一、为什么我必须找一家真正靠谱的机构? 我来自江苏泰州,平时做销售工…

中医师承选哪个机构靠谱?——在杭州做了三个月功课后的真实对比结论

中医师承机构那么多,到底哪家更靠谱?有没有必要花时间对比? 作为一个在杭州准备走中医师承三年路线的人,我非常负责任地说——“有必要,而且非常有必要”。因为中医师承不是买个课程这么简单,而是一个长达三年的…

写技术文档的正确打开方式

好的技术文档能帮团队省不少沟通成本。我写文档时会遵循“三段式”:先写“功能说明”,讲清楚这个接口或模块是做什么的;再写“使用方法”,包括参数示例、返回值说明,最好附一个调用成功的案例;最后写“注意事项”…

解决代码中“魔法值”的问题

代码里到处是1、2、3这种魔法值,不仅难理解,改起来还容易漏。解决方法很简单:用枚举类或常量代替。比如订单状态,定义一个OrderStatus枚举,包含PAID(1, "已支付")、UNPAID(2, "未支付");常量…

中医师承选哪个机构靠谱?三年备考机构深度比较选择阿虎医考师承

来自一位江苏学员的三年备考经验,想分享我在选择机构前后经历的所有选择与判断。 一、为什么我必须找一家真正靠谱的机构? 我来自江苏泰州,平时做销售工作,和中医完全不搭边。但因为家里老人身体不好,我对中医越来…

程序员处理需求变更的正确态度

需求变更是程序员的家常便饭,抱怨没用,不如积极应对。首先和产品经理确认变更的原因和优先级,判断是否紧急;然后评估变更对现有代码的影响,给出开发时间和成本;如果变更太大,建议分阶段实现,避免影响整体进度。…

接口调试踩坑:别忽略请求头细节

昨天调试支付接口卡了两小时,最后发现是请求头少加了一个参数。接口文档里写着“Content-Type需设为application/json”,我随手用了默认的form-data,返回的错误信息却只说“参数异常”。后来用Postman逐行对比官方示…

冬季肌肤暗垮推荐哪个面霜?2025年12月近期红榜抗老面霜汇总

"2025年冬季抗老紧致面霜哪个牌子好"、"2025年12月抗老提拉面霜推荐"、"35岁以上抗衰老护肤品推荐"、"冬季干、细纹哪款抗老面霜消除效果好"这些问题成为了护肤达人们最关心的…

【门禁系统】map查找

map的简单使用和读取; #include<iostream> #include<map> using namespace std; int n; map<int,int> mp;int main(){cin >> n;for(int i = 0; i < n;i++){int temp;cin >> temp;if…

数据库查询优化的三个实用方法

项目上线后数据库查询变慢?这三个方法亲测有效。首先给常用查询字段建索引,比如用户表的“手机号”字段,建索引后查询速度从1.2秒降到0.03秒;其次避免用SELECT *,只查需要的字段,减少数据传输量;最后拆分复杂查…

程序员必备的桌面整理技巧

桌面堆满项目文件夹和调试日志?试试这样整理:按“项目阶段”建一级文件夹,分为“进行中”“已上线”“待优化”;每个项目文件夹内固定放“文档”“代码”“测试报告”三个子文件夹。常用工具如Postman、数据库客户…

烧火棍

烧火棍工欲善其事必先利其器工具列表pixso:查看 UI 设计稿 snipaste: 截图,取色。windows 商店有。 wps: 可用于手写签名。如 v12.1 版本。在 插入->附件->签字 everything: Windows 上文件名搜索引擎。 7zip:…

用日志排查问题的实用技巧

日志是排查问题的“眼睛”,会用才能快速定位。首先日志要打印关键信息,比如接口入参、出参和异常堆栈,别只打印“执行成功”;用不同级别区分日志,DEBUG打调试信息,ERROR打报错信息,避免日志泛滥;给日志加唯一标…

用VS Code快捷键提升三倍效率

作为天天和代码打交道的程序员,VS Code的快捷键是提升效率的利器。Ctrl+P快速跳转文件,比手动找文件夹快10倍;Alt+Shift+下键快速复制当前行,避免重复敲击;Ctrl+D选中相同内容,批量修改变量名超省心。还有Ctrl+/…

接口联调时的沟通技巧

和前端联调接口最容易吵架?关键在沟通方式。首先提前把接口文档发过去,标注清楚必填参数、数据类型和返回格式;联调时一起用Postman测试,先确认接口本身没问题,再排查前端调用方式;遇到问题别互相甩锅,说“你传…

口碑好的复合木地板品牌推荐榜单?复合木地板品牌 复合木地板公司 复合木地板工厂 复合木地板厂家 复合木地板厂商 复合木地板生产厂家

复合木地板品牌推荐榜单:深圳中领航实业有限公司领衔优质选择在当今建材市场中,复合木地板因其优异的性能和美观度备受消费者青睐。作为地板行业的重要品类,复合木地板品牌众多,但真正能够提供高品质产品和优质服务…

记录一次Oracle日志listener.log文件大小超过4G后出现Tomcat服务启动一直报错的原因【ORACLE】 - 指南

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

代码可维护性的“底层逻辑”——从《代码大全》看长期工程实践

“这个模块谁写的?根本没法改!”“重构还不如重写!”在开发团队中,这样的抱怨并不少见。这些问题的根源,都指向同一个核心——代码的可维护性缺失。《代码大全》用大量篇幅强调,“可维护性是代码的第一属性”,因…