[题解][更新中]AtCoder Beginner Contest 398(ABC398) A~F

news/2025/3/22 23:36:08/文章来源:https://www.cnblogs.com/Sinktank/p/18787165

A - Doors in the Center

  • 如果\(n\)为奇数,就依次输出\(\frac{n-1}{2}\)-\(1\)=\(\frac{n-1}{2}\)-
  • 如果\(n\)为偶数,就依次输出\(\frac{n}{2}-1\)-\(2\)=\(\frac{n}{2}-1\)-

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

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n;
signed main(){cin>>n;if(n&1){for(int i=1;i<=n/2;i++) cout<<"-";cout<<"=";for(int i=1;i<=n/2;i++) cout<<"-";}else{for(int i=1;i<n/2;i++) cout<<"-";cout<<"==";for(int i=1;i<n/2;i++) cout<<"-";}return 0;
}

B - Full House 3

统计每个值出现的次数,输出Yes\(\iff\)最大次数\(\ge 3\)且次大次数\(\ge 2\)

代码为了方便对桶数组进行了排序,时间复杂度为\(O(n+V\log V)\)。也可以做到\(O(n)\)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int b[14];
signed main(){for(int i=0,a;i<7;i++) cin>>a,b[a]++;sort(b+1,b+1+13);if(b[13]>=3&&b[12]>=2) cout<<"Yes\n";else cout<<"No\n";return 0;
}

C - Uniqueness

可以用map等数据结构作为桶,或者离散化后直接用数组作为桶。

统计所有出现次数为\(1\)\(a_i\),将最大的\(a_i\)所对应的\(i\)记录并输出即可。

代码时间复杂度\(O(n)\)。如果用map或者离散化则是\(O(n\log n)\)

点击查看代码
#include<bits/stdc++.h>
#define N 300010
using namespace std;
unordered_map<int,int> ma;
int n,a[N],maxx,maxpos=-1;
signed main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i],ma[a[i]]++;for(int i=1;i<=n;i++){if(ma[a[i]]==1&&a[i]>=maxx){maxx=a[i],maxpos=i;}}cout<<maxpos;return 0;
}

D - Bonfire

让烟静止下来。

风向右吹,可以看做人和篝火同时向左走,且篝火在原来的位置留下了一团烟。

这样一来烟就是静止不动的了。遍历每一个操作,同时用set记录篝火走过的每一个位置,如果某次操作后人走到了此前篝火曾走过的位置,就输出1

代码时间复杂度\(O(n\log n)\)。如果把下标压到一个整数里再用哈希表也可以做到\(O(n)\),不过没必要。

点击查看代码
#include<bits/stdc++.h>
#define N 200010
using namespace std;
int n,r,c,x,y;
string s;
set<pair<int,int>> vis;
signed main(){cin>>n>>r>>c>>s;vis.insert({0,0});for(char i:s){if(i=='N') x++,r++;else if(i=='S') x--,r--;else if(i=='E') y--,c--;else if(i=='W') y++,c++;vis.insert({x,y});cout<<vis.count({r,c});}return 0;
}

很有意思的思维题。

E - Tree Game

不难发现,最后游戏结束时,\(G\)一定变成了一个完全二分图。

由于所给的图是树,所以将它看做二分图时,两个组的节点是固定的。从而两人的总操作数也是固定的,即为\(x\times y-(n-1)\),其中\(x,y\)是两组的节点数。

如果\(x\times y-(n-1)\)为奇数则选择先手,否则选择后手。

接下来每次己方操作,就选一条对方没连过的边输出即可。

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

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 110
using namespace std;
int n,cntw;
bitset<N> vis[N];
bitset<N> col;
vector<int> G[N];
void dfs(int u,int fa){cntw+=col[u];for(int i:G[u]){if(i==fa) continue;col[i]=col[u]^1,dfs(i,u);}
}
signed main(){cin>>n;for(int i=1,u,v;i<n;i++){cin>>u>>v;G[u].emplace_back(v);G[v].emplace_back(u);vis[u][v]=1;}dfs(1,0);int t=cntw*(n-cntw)-(n-1),u,v;if(t&1){cout<<"First"<<endl;}else{cout<<"Second"<<endl;cin>>u>>v;if(u==-1) exit(0);vis[u][v]=1;}for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){if(!vis[i][j]&&col[i]!=col[j]){cout<<i<<" "<<j<<endl;cin>>u>>v;if(u==-1) exit(0);vis[u][v]=1;}}}return 0;
}

作为E实在有点水了。

F - ABCBA

当我们找到一个\(S\)的回文后缀,将这个后缀之前的东西翻转过来拼在\(S\)末尾,这样一个合法的回文串\(S'\)就构造成了。

为了使\(S'\)最短,我们要寻找\(S\)的最长回文后缀。

可以使用Manacher算法求解,不过我还不会,所以就用字符串哈希了(

求法比较自然,就是根据回文串长度

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

点击查看代码
#include<bits/stdc++.h>
#define ull unsigned long long
#define N 500010
#define B 131
using namespace std;
string s;
int n;
ull ds[N],dr[N],powb[N];
ull f(int l,int r){return ds[r]-ds[l-1]*powb[r-l+1];
}
ull fr(int l,int r){swap(l,r),l=n-l+1,r=n-r+1;return dr[r]-dr[l-1]*powb[r-l+1];
}
signed main(){powb[0]=1;for(int i=1;i<N;i++) powb[i]=powb[i-1]*B;cin>>s;n=s.size(),s=' '+s;for(int i=1;i<=n;i++) ds[i]=ds[i-1]*B+s[i];for(int i=1;i<=n;i++) dr[i]=dr[i-1]*B+s[n-i+1];int i;for(i=1;i<=n;i++){if(f(i,n)==fr(i,n)){for(char j:s) if(j!=' ') cout<<j;for(int j=i-1;j>=1;j--) cout<<s[j];break;}}return 0;
}

作为F实在有点水过头了……

而且放\(\bf O(n^2)\)暴力过了!?

G - Not Only Tree Game

再补。

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

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

相关文章

Aligning the Objective of LLM-based Program Repair 论文笔记

介绍 (1) 发表 2025-02 ICSE24 (2) 挑战当前方法的推理目标与 LLM 的训练目标没有对齐。现有 LLM-based 方法通常采用 MLM 的方式预测修复代码(然而尽管模型参数被增大百倍但修复结果甚至没有翻一番,这与其他任务的明确可伸缩性形成对比)。因此本文假设在训练中 <masked,…

监狱智能视频分析告警系统解决方案

监狱智能视频分析告警系统解决方案能够精准监测到静坐不动、离床、攀高、独处等行为。例如,当一名囚犯长时间静坐不动时,监狱智能视频分析告警系统解决方案会自动识别并发出预警,以便管理人员及时了解情况,防止囚犯出现自伤、自残等危险行为。在洗手间场景中,系统对入厕超…

昆明理工大学最新《现代材料测试技术》复试真题及答案

-材料测试 昆工材料物理与化学、材料学、材料表征与分析、材料工程、F001现代材料测试技术、864材料科学基础、昆明理工大学材料调剂

RTT 全志D1s跑tina linux

刚毕业那会抽奖抽了一块RTT的D1S开发板,看了一下打印log就放下吃灰了。跑RT-thread的感觉折腾起来太麻烦了就让他吃灰了。最近手头有一块屏幕和一个2欧的小喇叭打算驱动一下。 正好这块板子也出来好多年了。玩一玩。首先我找到了百问网的哪吒开发板他也是D1S的,直接把他的SDK…

COMSOL 基础学习笔记

设置网格 软件通过计算网格顶点的数值,推算其他位置的数值。 行函数:移动的波。 二次行函数(除网格顶点外还计算两定点连线中心的值):网格最大长度 \(≤\frac{λ}{6}\) 一次行函数:网格最大长度 \(≤\frac{λ}{12}\) 修改方式:

NSSCTF ROUND#28 Ciallo~(∠・ω )⌒☆ WriteUp

WriteUp 题目信息 来源:NSSCTF 名称:ROUND#28 Ciallo~(∠・ω )⌒☆ 分类:Reverse 描述:无题目链接: https://www.nssctf.cn/contest/732/解题思路 首先使用DIE对文件进行查壳,发现这是一个无壳的64位exe文件。于是使用64位IDA对文件进行反汇编,得到伪代码如下:先一步步…

day35 nfs共享服务器的学习

day35 nfs共享服务器的学习 1.企业集群为什么要共享服务器 没有共享服务器先看一下没有共享服务器的问题 A用户上传啦图片到web01的服务器,然后B用户访问但是负载均衡服务器把请求分发到了web02的服务器上,导致B用户查看不了图片。配置啦共享服务器无论是用户把图片发送给web…

Nature Communications | 全基因组沉默子图谱揭示人类细胞基因调控新机制

摘要总结 这篇文章是2025年1月发表在《Nature Communications》杂志上的一篇研究,标题为“Uncovering the whole genome silencers of human cells via Ss-STARR-seq”。这篇文章通过开发一种名为Ss-STARR-seq的高通量筛选技术,首次在全基因组范围内系统性鉴定了人类细胞中的…

数据结构3

基本数据处理技术概率论与数理统计1-基本概念 概率论与数理统计2-基本数据结构 概率论与数理统计3-基本数据处理技术 基本的数据处理技术 查找 查找的基本概念 在哪里找:查找表是由同一类型的数据元素(或记录)构成的集合,集合中的数据元素之间关系松散。 按什么查找:根据给…

NSSCTF ROUND#28 动态调试 WriteUp

WriteUp 题目信息 来源:NSSCTF 名称:ROUND#28 动态调试 分类:Reverse 描述:无题目链接: https://www.nssctf.cn/contest/732/解题思路 首先使用DIE对文件进行查壳,发现这是一个无壳的32位ELF文件。于是使用32位IDA对文件进行反汇编,得到伪代码如下:为方便阅读伪代码,修…

Video Analysis Assignment

This scene is what the heroine saw from a begin sycarmore at the first time . It was this landscape that awake the heroine of her father’s word: “ A painting is more than the sum of its parts”. This scene is shot from the big sycarmore and it is a estab…

AI一键生成流程图架构图甘特图饼图等可视化图形 原创

AI脑图除了使用文字、语音、图片、文件、网页和视频等一键生成思维导图外,现在也可以支持一键生成流程图、架构图、甘特图等可视化图形了,使用非常简单,告诉AI脑图你想要生成什么图,大概不到两分钟就会制作好并以图片回复给你啦。 支持的可视化图形有: 流程图 例如向AI脑图…