[题解]Refact.ai Match 1 (Codeforces Round 985) A~C
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\)可以用下面的方法求得:
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\)分别表示在跳过的比赛之前、属于跳过的比赛、在跳过的比赛之后。则
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
[题解]Refact.ai Match 1 (Codeforces Round 985) A~C的更多相关文章
- codeforces 920 EFG 题解合集 ( Educational Codeforces Round 37 )
E. Connected Components? time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 【Codeforces Round】 #431 (Div. 2) 题解
Codeforces Round #431 (Div. 2) A. Odds and Ends time limit per test 1 second memory limit per test ...
- Codeforces Round #546 (Div. 2) 题解
Codeforces Round #546 (Div. 2) 题目链接:https://codeforces.com/contest/1136 A. Nastya Is Reading a Book ...
- Codeforces Round #544 (Div. 3) 题解
Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization 题目链接:https://codeforces.com/contest/113 ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解
Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题目链接:https://codeforces.com/contest/1130 ...
- Codeforces Round #540 (Div. 3) 部分题解
Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...
- Codeforces Round #539 (Div. 2) 题解
Codeforces Round #539 (Div. 2) 题目链接:https://codeforces.com/contest/1113 A. Sasha and His Trip 题意: n个 ...
- Codeforces Round #535 (Div. 3) 题解
Codeforces Round #535 (Div. 3) 题目总链接:https://codeforces.com/contest/1108 太懒了啊~好久之前的我现在才更新,赶紧补上吧,不能漏掉 ...
- Codeforces Round #531 (Div. 3) ABCDEF题解
Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ...
- Codeforces Round #527 (Div. 3) ABCDEF题解
Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...
随机推荐
- 「Note」DP 方向 - DP 优化
1. 单调队列优化 DP 1.1. 简介 当一个选手比你小还比你强,你就打不过他了.这是对单调队列简单形象的概括. 单调队列在转移的过程中不断排除不可能成为决策点的元素,使每次转移寻找决策点的时间复杂 ...
- Gin?有这一篇就够了!
Gin Gin是Golang的一个后端框架,封装比较优雅,API友好. go get -u github.com/gin-gonic/gin 1.hello word package main imp ...
- Spring用到的10种设计模式,真巧妙!
前言 作为一名有多年开发经验的老司机,每次翻看Spring源码都让我感叹:"这哪是框架,分明是设计模式的百科全书!" 有些小伙伴在工作中可能只会用@Autowired,却不知背后藏 ...
- SRM合同更新行项目(组件/SAPSRM/WDC_CTR_DOTC_IT)
* Get the selected elements of the item table > lt_elem_set = lon_ctr_item->get_selected_eleme ...
- 从洞察到决策,一文解读标签画像体系建设方法论丨DTVision分析洞察篇
一.数字营销是数字化转型排头兵 <⼗四五数字经济发展规划>中强调,要⼤⼒推进数字化转型,形成数据驱动的智能决策能⼒,提升企业整体运营效率. 要做好数字化转型,企业可从产.研.供.销.⽤等多 ...
- 几分钟了解下java虚拟机--01
JDK, JRE, JVM的关系 ⚙ 解释器: 逐行转换字节码为机器码 即时编译器(JIT):将热点代码(经常执行的代码段)编译成高效的本地机器码,并缓存起来以供后续直接执行 Just-In-Time ...
- Java反射与自定义注解实战指南
Java反射与自定义注解实战指南 第一部分:Java反射核心机制 一.反射的本质与价值 反射是Java在运行时动态获取类信息并操作类的能力,它是框架设计的基石.通过反射,我们可以在运行时: 获取类的完 ...
- plugin:prettier/recommended和vue/max-attributes-per-line冲突
具体表现为 eslint虽然配置如下 module.exports = { root: true, env: { 'vue/setup-compiler-macros': true, // 处理err ...
- MySQL与Oracle之间的区别
这是参考别人然后自己总结的关于两者之间的区别,方便自己记忆 1.首先Oracle数据库是大型数据库,功能很强大,性能也很优越,所以大型的开发项目一般使用的就是Oracle但同时他也是比较昂贵的;而My ...
- FT 终面记录
可能挂了 写一个记录总结一下吧 终面 我很庆幸能走到终面 前面很多次我都很可能挂掉 前面面试不是很紧张就是一直觉得自己会挂掉 终面了想想自己很可能会进 FT 有点紧张了 吾 现在还做不到 宠辱 ...