[题解](更新中)Refact.ai Match 1 (Codeforces Round 985)

news/2024/11/13 0:16:42/文章来源:https://www.cnblogs.com/Sinktank/p/18537920

A - Set

显然答案是\(\max(\lfloor\frac{r}{k}\rfloor-l+1,0)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,l,r,k;
signed main(){cin>>t;while(t--){cin>>l>>r>>k;cout<<max(0ll,r/k-l+1)<<"\n";}return 0;
}

B - Replacement

我们发现只要\(0\)\(1\)各存在至少\(1\)个,操作就能进行下去。所以\(r_i=1\)的操作可以看做删掉一个\(0\)\(r_i=0\)的操作则可以看做删掉一个\(1\)

这样模拟就可以了,每次操作前如果剩余\(0,1\)的个数存在\(0\)则答案是NO

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int t,n;
string s,r;
int main(){cin>>t;while(t--){cin>>n>>s>>r;int cnt0=0,cnt1=0;bool f=1;for(char i:s) (i=='0'?cnt0:cnt1)++;for(char i:r){if(!cnt0||!cnt1){f=0;break;}(i=='0'?cnt1:cnt0)--;}cout<<(f?"YES\n":"NO\n");}return 0;
}

另一种做法很简单,如果\(s[1,n]\)\(1\)的个数减去\(r[1,n-2]\)\(0\)的个数为\(1\),答案就是YES,否则NO。原理差不多,目的是让执行最后一次操作前,序列中恰好有一个\(0\)和一个\(1\)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int t,n;
string s,r;
int main(){cin>>t;while(t--){cin>>n>>s>>r;r.pop_back();int cnts=0,cntr=0;for(int i:s) cnts+=(i=='1');for(int i:r) cntr+=(i=='0');if(cnts-cntr==1) cout<<"YES\n";else cout<<"NO\n";}return 0;
}

C - New Rating

二分解法

考虑二分答案\(x\),转为判断“是否能让最终得分\(\ge x\)”。

\(f[i]\)表示参加第\(i\)场比赛之后的得分;\(g[i]\)表示\(i\)这场比赛前可能的最小得分,使得最终得分\(\ge x\)\(f\)可以通过模拟求出,\(g\)可以用下面的方法求得:

\[g[i]=\begin{cases} x&i=n\\ g[i+1]-1&i\le n,a[i]\ge g[i+1]\\ g[i+1]+1&i\le n,a[i]<g[i+1] \end{cases}\]

只要存在区间\(l\le r\),使得\(f[l-1]\ge g[r+1]\),则说明我们可以让最终得分\(\ge x\)

时间复杂度\(O(n\log n)\)

点击查看代码
#include<bits/stdc++.h>
#define N 300010
using namespace std;
int t,n,a[N],f[N];
bool check(int x){int g=x;for(int i=n;i>=1;i--){if(f[i-1]>=g) return 1;if(a[i]>=g) g--;else g++;}return 0;
}
int main(){cin>>t;while(t--){cin>>n;int cur=0;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>cur) cur++;else if(a[i]<cur) cur--;f[i]=max(f[i-1],cur);}int l=0,r=n;while(l<r){int mid=(l+r+1)>>1;if(check(mid)) l=mid;else r=mid-1;}cout<<l<<"\n";}
}

DP解法

\(f[i][j\in[0,2]]\)来表示考虑前\(i\)个比赛,第\(i\)场的状态是\(j\)的答案。其中\(j=0,1,2\)分别表示在跳过的比赛之前、属于跳过的比赛、在跳过的比赛之后。则

\[f[i][j]=\begin{cases} g(f[i-1][0],a[i])&j=0\\ \max(f[i-1][0],f[i-1][1])&j=1\\ \max(g(f[i-1][1],a[i]),g(f[i-1],a[i]))&j=2 \end{cases}\]

转移可以滚掉第\(1\)维。最终答案就是\(\max(f[n][1],f[n][2])\)

时间复杂度\(O(n)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 300010
using namespace std;
int t,n,a[N],f[3];
int g(int a,int b){return a+(b>a)-(b<a);}
signed main(){cin>>t;while(t--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];f[0]=0,f[1]=f[2]=INT_MIN;for(int i=1;i<=n;i++){f[2]=max(g(f[1],a[i]),g(f[2],a[i]));f[1]=max(f[1],f[0]);f[0]=g(f[0],a[i]);}cout<<max(f[1],f[2])<<"\n";}return 0;
}

D - Cool Graph

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

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

相关文章

Chrome如何查看保存的网站密码,如此简单!

前言 我在开发java应用的时候,一般都是使用谷歌浏览器的,也就是Chrome浏览器。这个浏览器几乎是所有浏览器里面功能最强大的浏览器。里面有很多神奇的东西。比如,它可以帮助我们记住我们登录的网站的账号密码。有时候,我们可能已经习惯了谷歌浏览器帮助我们保存的密码了,有…

现代IT基础设施管理(1):Terraform初识和小试牛刀

基础设施包括各种云,像国内的阿里云、腾讯云和华为云,国外的AWS、微软Azure云和谷歌云,还有Kubernetes和OpenStack,都可以用Terraform进行资源管理。使用基础设施即代码(Infrastructure as Code, IaC)的方式来管理基础设施,这是现代IT基础设施管理的一个重要趋势,它允许…

用一个项目把控制层、业务层、持久层将明白了,每一句话都讲的很清楚

实现一个数据库和前端的交互 三层结构持久层开发:依据前端页面的设置规划相关的sql语句,以及进行配置业务层开发:核心功能控制、业务操作以及异常的处理控制层开发:前后端连接,接受请求,处理响应完整的数据响应流程如下:前端发起请求: 前端通过浏览器或其他客户端发起H…

『模拟赛』NOIP2024加赛4

『模拟赛记录』NOIP2024加赛4Rank 给我唐完了,又名,【MX-S5】梦熊 NOIP 2024 模拟赛 1。A. 王国边缘 好像简单倍增就做完了。 由于昨天 T5 在我脑海中留下了挥之不去的印象,今天一上来看到这题就发现是一个内向基环树森林。然后被硬控硬控硬控,最后一个小点加一点优化就能过…

使用 roslyn 的 Source Generator 自动完成依赖收集和注册

roslyn Source Generator 使用案例在 使用 Hosting 构建 WPF 程序 提到,因为不使用 Stylet 默认的 IOC 容器,所以不能自动收集和注册 View/ViewModel,需要动手处理。 如果项目比较大,手动处理显然过于麻烦。这里使用 roslyn 的 Source Generator 自动完成依赖收集和注册。 …

高级语言程序设计第七次作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400204 姓名:刘嘉奕 1.2.需要思维贯穿,逻辑性强3.刚开始没用指针,导致结果为负数,但在使用指针过程中还存在不…

叉积

向量基本运算点积叉积一.Transmitters由叉积的基本定理得出,要判断一个点c再一条直线ab的左边还是右边,只要看(b-a)*(c-a)大于0还是小于0,对于这题,我们可以将左右边看成发射范围的半圆,因为要找出覆盖最多点的数量,所以最优解肯定有一个点再直径上,再通过叉积找出所…

内核脏牛提权

脏牛靶机 已知靶机账号密码:msfadmin/msfadmin 靶机开启ssh服务开启靶机获取IP msfadmin/msfadmin登录 ifconfig #获取靶机IP得到靶机IP:192.168.213.247 开启kali ssh链接靶机 直接输入ssh msfadmin@192.168.213.247进行链接会出现报错 出现报错的原因是ssh客户端和服务器之…

[极客大挑战 2019]Secret

首页什么都没有,查看网页源码,发现有一个链接,提示found除去view-source访问,得到以下页面,点击secret直接查阅结束,没回显flag,依旧在卖关子。使用burp suite抓包获取返回的源码,找到注释中有个文件secr3t.php访问secr3t.php得到代码里说flag在flag.php里,直接访问fl…

今年测试这工资是认真的吗?

在如今的求职市场中,软件测试面试中的“八股文”几乎成为了一种必考内容。所谓“八股文”,指的是一系列标准化的技术面试题目,这些题目涵盖了测试理论、接口自动化测试、测试工具框架、性能测试、项目场景等多个方面...📝 博主首页 : 「码上生花」 ,同名公众号 :「伤心的…

开发人员,千万不要去碰那该死的业务参数,无论什么时候!

你好呀,我是歪歪。 前几天发了一个牢骚:本来只是单纯的吐槽一下,但是好多人对其中的细节比较感兴趣。 大家都是搞技术的嘛,对于“踩 BUG”这种喜闻乐见的事情,有兴趣是很正常的。 其实我这个 BUG,其实严格意义上不能叫做 BUG,因为和程序无关,甚至和技术的关系都不算大。…

java小课设:使用MySQL做一个聊天室

bro是个懒狗,耗时一个晚上,只写了一些基础功能,其他的可以根据需要自己添加实现思路:在MySQL数据库中设置一个message表,用来存储聊天信息,聊天界面输入的内容写入message表,用户程序每秒从MySQL中获取一次聊天记录,并加载进入自己的页面,实现聊天室。食用方法: Chat…