Codeforces Round 923 (Div. 3)

这是我第二次参加 cf阴间场。

10 minutes ago:

这次报名人数超过 4 万,一开始网站就崩溃了,比赛延迟了 10 分钟。。开局不顺。

2 minutes later:

cf成功地又炸了。过了 2 分钟,终于进去了。

A题

题目:
您有一个由 n 个单元格组成的水平条带。每个单元格要么是白色,要么是黑色。

您可以选择一段连续的单元格,然后将它们全部涂成白色。完成此操作后,该段中的所有黑色单元格将变为白色,而白色单元格将保持白色。

为了使所有 n 个单元格都变成白色,需要涂成白色的单元格段的最小长度是多少?
做法:模拟。
找到第一个出现和最后出现的黑色,下标相减再加 1 即可。

5 minutes later:

A题过

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll T,n,l1,l2;
string s;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n>>s;
for(int i=0;i<n;i++)
if(s[i]=='B'){l1=i;break;}
for(int i=n-1;i>=0;i--)
if(s[i]=='B'){l2=i;break;}
cout<<l2-l1+1<<"\n";
}
return 0;
}

B题

题目:
波利卡普丢失了由小写拉丁字母组成的长度为 n 的字符串 s ,但他仍然保留着它的痕迹。

字符串 s 的踪迹是一个由 n 个整数组成的数组 a,其中 ai 是 si=sj 的索引 j (j < i) 的个数。例如,字符串 abracadabra 的踪迹是数组 [0,0,0,1,0,2,0,3,1,1,4]。

给定一个字符串的踪迹,从中找出个字符串 s。字符串 s 应该只由小写拉丁字母 a-z 组成。
做法:
用 vector 存字母出现次数对应的字母。
循环时每次取该次数减 1 时可以取到的字母,再存入即可。

15 minutes later:

B题过

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2e5+10;
ll T,n,a[N];
char c,tt;
vector<char> p[N];
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],p[i].clear();
c='a';
for(int i=1;i<=n;i++){
if(!a[i]) cout<<(char)(c++),tt=c-1;
else{
ll t=p[a[i]-1].size();
cout<<p[a[i]-1][t-1];
tt=p[a[i]-1][t-1];
p[a[i]-1].pop_back();
}
p[a[i]].push_back(tt);
}
cout<<"\n";
}
return 0;
}

C题

题目:
给定一个由 n 个整数组成的数组 a,一个由 m 个整数组成的数组 b 和一个偶数 k。

你的任务是确定是否有可能从这两个数组中选择的 k/2 个元素,使得所选元素中包括从 1 到 k 的每一个整数。

例如如果 a=[2,3,8,5,6,5],b=[1,3,4,10,5],k=6,那么可以从数组 a 中选择值为 2,3,6 的元素,从数组 b 中选择值为 1,4,5 的元素。在这种情况下,从 1 到 6 的所有数字都将包含在所选的元素中。

如果是 a=[2,3,4,5,6,5],b=[1,3,8,10,3],k=6,则无法按照要求选择元素。

请注意,您不需要找到选择元素的方法,您的程序只需检查是否可以按要求选择元素。
做法:
先判断两个数组中的数字是否包含了 1 到 k 的所有整数。
再判断两个数组是否分别拥有 k/2 个 1 到 k 的整数即可。

29 minutes later:

C题过

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e6+10;
ll T,n,m,k,ct1,ct2,a,b;
bool p[N],p1[N],p2[N];
bool flag;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n>>m>>k;
flag=1;ct1=ct2=0;
for(int i=1;i<=k;i++) p[i]=p1[i]=p2[i]=0;
for(int i=1;i<=n;i++) cin>>a,p[a]=1,p1[a]=1;
for(int i=1;i<=m;i++) cin>>b,p[b]=1,p2[b]=1;
for(int i=1;i<=k;i++)
if(!p[i]){flag=0;break;}
for(int i=1;i<=k;i++)
if(p1[i]) ct1++;
for(int i=1;i<=k;i++)
if(p2[i]) ct2++;
if(ct1<k/2||ct2<k/2) flag=0;
if(flag) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}

D题

题目:
给你一个由 n 个整数组成的数组 a 和 q 个查询。

对于每个查询,你都需要在 al,al+1,…,ar 中找到一对不同的元素,或者报告不存在这样一对元素。
做法:
贪心。
要找一对不同的元素,那么找最大值和最小值。
如果最大值和最小值不同,那么就存在。
st 表正可以。题目中 n 最大 1e5,st 表并不会超时。
预处理:O(nlogn) 查询:O(1)。
那么如何记录位置呢?
可以将 st 表记录的值改为下标,递推时再改一下即可。

100 minutes later:

st 表数组大小写反了。。

喜提3发罚时。

D题过

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2e5+10;
ll T,n,q,l,r,A[N],f[33][N],g[33][N];
ll qrymin(ll l,ll r){
ll k=log2(r-l+1);
ll a=f[k][l],b=f[k][r-(1<<k)+1];
return A[a]<A[b]?a:b;
}
ll qrymax(ll l,ll r){
ll k=log2(r-l+1);
ll a=g[k][l],b=g[k][r-(1<<k)+1];
return A[a]>A[b]?a:b;
}
void st(){
for(int i=1;i<=n;i++) f[0][i]=i,g[0][i]=i;
for(int i=1;(1<<i)<=n;i++)
for(int j=1;j+(1<<i)-1<=n;j++){
ll l=f[i-1][j],r=f[i-1][j+(1<<i-1)];
ll l2=g[i-1][j],r2=g[i-1][j+(1<<i-1)];
f[i][j]=A[l]<A[r]?l:r;
g[i][j]=A[l2]>A[r2]?l2:r2;
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++) cin>>A[i];
st();
cin>>q;
while(q--){
cin>>l>>r;
ll t1=qrymin(l,r),t2=qrymax(l,r);
if(t1==t2||A[t1]==A[t2]) cout<<"-1 -1\n";
else cout<<t1<<" "<<t2<<"\n";
}
}
return 0;
}

E题

题目:
给你两个整数 n 和 k (k<n),其中 k 是偶数。

你的任务是构造一个长度为 n 的 k 级排列。

如果在所有长度为 k 的连续线段的总和中,任意两个和相差不超过 1,那么这个排列就叫做 k 级排列。

找出长度为 n 的任意一个 k 级排列。
做法:
构造题,考虑贪心。
将数组分为 n/k 组,且向上取整。
将数字从大到小填入数组中。
要使相差不超过 1,可以让较大的数与较小的数相邻。
因此每两次掉换循环方向。

赛后 9 分钟过。。

Deepl 的翻译出了问题,看题目看了好久,最后直接看的英文。。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2e5+10;
ll T,n,k,ct,a[N];
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n>>k;ct=n;
for(int i=1;i<=n;i++) a[i]=0;
for(int i=1;ct;i++)
if(i&1)
for(int j=0;j<(n+k-1)/k;j++)
if(j*k+i<=n) a[j*k+i]=(ct--);
else
for(int j=(n+k-1)/k-1;j>=0;j--)
if(j*k+i<=n) a[j*k+i]=(ct--);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<"\n";
}
return 0;
}

n days later:

F题

题目:
给定一张 n 个点,m 条边,边有边权的无向图,无重边自环,不保证连通。定义一个简单环为不经过重复点与重复边的环路径,保证全图至少有一个简单环。记一个简单环的权值是环上最小的边权,你需要找到任意一个全图中权值最小的一个简单环并输出它。

3<=n,m<=2*10^5,w<=10^6。
做法:
考虑最小生成树的做法。

当这条边连接的点已经在同一个集合中时,就说明形成了环。

因此可以找出边的最小值。

之后找出这一条边所在的环即可。(dfs)
代码:
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=4e5+10;
ll T,n,m,t,ans,ct,h[N],a[N],f[N],fa[N];
struct E{
ll u,v,w;
}e[N];
struct E2{
ll to,nxt;
}e2[N];
void init(){
for(int i=1;i<=n;i++) fa[i]=i,h[i]=f[i]=0;ct=t=ans=0;
}
bool cmp(E L,E R){
return L.w>R.w;
}
ll getfa(ll x){
return fa[x]==x?x:fa[x]=getfa(fa[x]);
}
void add(E a){
e2[++ct]={a.v,h[a.u]},h[a.u]=ct;
e2[++ct]={a.u,h[a.v]},h[a.v]=ct;
}
void dfs(ll u,ll Fa){
f[u]=Fa;
for(int i=h[u];i;i=e2[i].nxt)
if(e2[i].to!=Fa) dfs(e2[i].to,u);
}
void Ans(ll x,ll y){
a[++ans]=x;
if(x!=y) Ans(f[x],y);
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>T;
while(T--){
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>e[i].u>>e[i].v>>e[i].w;
sort(e+1,e+m+1,cmp);init();
for(int i=1;i<=m;i++){
ll u=getfa(e[i].u),v=getfa(e[i].v);
if(u==v) t=i;
else fa[u]=v,add(e[i]);
}
cout<<e[t].w<<" ";
dfs(e[t].u,0);Ans(e[t].v,e[t].u);
cout<<ans<<"\n";
for(int i=1;i<=ans;i++) cout<<a[i]<<" ";
cout<<"\n";
}
return 0;
}

G

没做,待更新~

总结:

  1. 数组范围不要开错。
  2. 不要依赖于翻译~

Codeforces Round 923 (Div. 3) 比赛记录的更多相关文章

  1. Codeforces Round #606 Div. 2 比赛总结

    比赛情况 bq. A题 Wrong Answer on test 2 , E题sb题没切.bqbqbq. 比赛总结 bq. 那就直接上题解吧!^-^ A 数位dp,分类讨论,注意细节. Talk is ...

  2. Codeforces Round #605 (Div. 3) 比赛总结

    比赛情况 2h才刀了A,B,C,D.E题的套路做的少,不过ygt大佬给我讲完思路后赛后2min就AC了这题. 比赛总结 比赛时不用担心"时间短,要做多快",这样会匆匆忙忙,反而会做 ...

  3. 【cf比赛记录】Codeforces Round #601 (Div. 2)

    Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...

  4. 【cf比赛记录】Codeforces Round #600 (Div. 2)

    Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...

  5. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  6. 刷题记录:Codeforces Round #734 (Div. 3)

    Codeforces Round #734 (Div. 3) 20210920.网址:https://codeforces.com/contest/1551. 编程细节:下标定义不要一会[1,n]一会 ...

  7. 刷题记录:Codeforces Round #739 (Div. 3)

    Codeforces Round #739 (Div. 3) 20210907.网址:https://codeforces.com/contest/1560. --(叹). A 不希望出现带" ...

  8. 刷题记录:Codeforces Round #724 (Div. 2)

    Codeforces Round #724 (Div. 2) 20210713.网址:https://codeforces.com/contest/1536. div2明显比div3难多了啊-只做了前 ...

  9. 刷题记录:Codeforces Round #725 (Div. 3)

    Codeforces Round #725 (Div. 3) 20210704.网址:https://codeforces.com/contest/1538. 感觉这个比上一个要难. A 有一个n个数 ...

  10. 刷题记录:Codeforces Round #719 (Div. 3)

    Codeforces Round #719 (Div. 3) 20210703.网址:https://codeforces.com/contest/1520. 没错,我是个做div3的蒟蒻-- A 大 ...

随机推荐

  1. 02_Vue模板语法

    Vue模板语法有2大类:         1.插值语法:           功能:用于解析标签体内容.           写法:{{xxx}},xxx是js的表达式,且可以直接读取到data中的所 ...

  2. HarmonyOS NEXT应用开发之MpChart图表实现案例

    介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI.本示例主要介绍如何使用三方库MpChart实现柱状图U ...

  3. Apsara Stack 同行者专刊 | 怀同行之心,筑信任之基,践数智之行

    简介: 政企云平台处在怎样的历史阶段?数智创新的同行者们面临着怎样的挑战与机遇?在时代巨幕下,政企期待云厂商扮演怎样的角色?阿里云智能研究员.混合云平台总经理刘国华认为,云厂商不仅需要有定力与实力,也 ...

  4. 系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术

    ​简介:本篇以 first contact (通信两端建立首个连接) 场景为例,介绍 SMC-R 通信流程. ​ 文/龙蜥社区高性能网络SIG 一.引言 通过上一篇文章 <系列解读SMC-R:透 ...

  5. Snowflake核心技术解读系列——架构设计

    ​简介:Snowflake取得了巨大的商业成功,技术是如何支撑起它的千亿美元市值呢?它技术强在哪?本文为大家倾情解读Snowflake的核心技术原理. 背景:2020年9月16日,Snowflake成 ...

  6. Region-区域(默认和新增)适配器

    Prism内置了几个区域适配器 ContentControlRegionAdapter ItemsControlRegionAdapter SelectorRegionAdapter ComboBox ...

  7. [Python急救站]基于Transformer Models模型完成GPT2的学生AIGC学习训练模型

    为了AIGC的学习,我做了一个基于Transformer Models模型完成GPT2的学生AIGC学习训练模型,指在训练模型中学习编程AI. 在编程之前需要准备一些文件: 首先,先win+R打开运行 ...

  8. Django高级表单处理与验证实战

    title: Django高级表单处理与验证实战 date: 2024/5/6 20:47:15 updated: 2024/5/6 20:47:15 categories: 后端开发 tags: D ...

  9. BIN文件格式

    BIN文件里面包含的只有代码生成的机器码,不像ELF文件或者obj文件一样还包含其他东西.MS-DOS.设备驱动文件以及操作系统的bootloader文件都是BIN文件. 在NASM中,BIN文件默认 ...

  10. ansible系列(21)--ansible的变量注册Register

    1. 变量注册Register register 关键字可以将某个 task 任务结果存储至变量中,最后使用 debug模块 输出变量内容,可以用于后续排障: 示例一:register的基本使用: # ...