[题解](更新中)AtCoder Beginner Contest 393(ABC393) A~E

news/2025/2/19 14:00:35/文章来源:https://www.cnblogs.com/Sinktank/p/18717692

A - Poisonous Oyster

  • 如果两人都肚子疼,就是第\(1\)瓶。
  • 如果只有Takahashi肚子疼,就是第\(2\)瓶。
  • 如果只有Aoki肚子疼,就是第\(3\)瓶。
  • 如果都不肚子疼,就是第\(4\)瓶。

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

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string a,b;
signed main(){cin>>a>>b;if(a[0]=='s'&&b[0]=='s') cout<<"1\n";else if(a[0]=='s'&&b[0]=='f') cout<<"2\n";else if(a[0]=='f'&&b[0]=='s') cout<<"3\n";else cout<<"4\n";return 0;
}

B - A..B..C

枚举前\(2\)个位置便可以作差得出第\(3\)个位置,判断并计数即可。

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

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
int n,ans;
signed main(){cin>>s;n=s.size();for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int k=2*j-i;if(k>=n) continue;ans+=(s[i]=='A'&&s[j]=='B'&&s[k]=='C');}}cout<<ans<<"\n";return 0;
}

C - Make it Simple

自环直接跳过,重边用set去重。最后保留在set中的边数为\(k\),则答案为\(m-k\)

时间复杂度\(O(m\log m)\),当然也很容易做到\(O(m)\)

点击查看代码
#include<bits/stdc++.h>
#define N 200010
using namespace std;
int n,m,ans;
vector<int> G[N];
set<pair<int,int>> se;
signed main(){cin>>n>>m;for(int i=1,u,v;i<=m;i++){cin>>u>>v;if(u==v) continue;if(u>v) swap(u,v);se.insert({u,v});}cout<<m-se.size()<<"\n";return 0;
}

D - Swap to Gather

设共有\(m\)1,第\(i\)1的位置为\(p_i\),有两种考虑方式(代码使用第\(1\)种实现):

  • 设第\(1\)1最终的位置为\(k\)。则答案为\(\sum\limits_{i=1}^m |p_i-(k+i-1)|=\sum\limits_{i=1}^m |(p_i-i+1)-k|\)
    \(b_i=p_i-i+1\),则答案为\(\sum\limits_{i=1}^m |b_i-k|\),则这是一个典型的货仓选址问题,其中\(k\)\(b\)的中位数时上式取到最小。
    实际上也不一定非得设第\(1\)个位置为\(k\),比如你可以定义\(b_i=p_i-i+C\)\(C\)可以是任何常数。
  • 显然最优解一定可以通过保持至少一个1位置不变取到。
    假设第\(k\)1位置不变,则不难发现答案为\(\sum\limits_{i=1}^m |d(i,k)|\),其中\(d(x,y)\)\(s[p_x\sim p_y]\)0的个数。进一步可得\(d(x,y)=(p_y-p_x)-(y-x)=(p_y-y)-(p_x-x)\)
    \(b_i=p_i-i\),则答案为\(\sum\limits_{i=1}^m |b_k-b_i|\)。根据定义知道\(d(x,y)\ge 0\),故\(b\)单调不降。所以这仍然是一个货仓选址问题,\(k\)取中间值即可取到最小(换句话说,我们证明了保留最中间的1不动一定最优)。

注意开long long

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

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,cnt,ans;
vector<int> v;
string s;
signed main(){cin>>n>>s,s=' '+s;for(int i=1;i<=n;i++){if(s[i]=='1') v.emplace_back(i-cnt),cnt++;}//因为已经有序的所以不用排序int t=v[v.size()/2];for(int i:v) ans+=abs(t-i);cout<<ans<<"\n";return 0;
}

E - GCD of Subset

关注这道题的数据范围:发现我们没法为每个元素分解质因数,更没法枚举每个子序列,但\(V=10^6\),所以枚举公因数可能会很方便。

具体来说,定义\(s_x\)\(x\)\(A\)中的出现次数,\(t_x\)\(x\)的倍数在\(A\)中的出现次数,那么\(t_x=\sum\limits_{x|n} s_n\)

\(s\)可以在输入的同时处理出来;\(t\)的计算,仅需我们对于每个\(x\)枚举\(n\),其时间复杂度是一个调和级数\(O(\frac{V}{1}+\frac{V}{2}+\dots+\frac{V}{V})=O(V\log V)\)

接下来我们枚举公因数\(x\),如果\(t_x\ge k\),就可以对所有\(x\)的倍数产生\(x\)的贡献。

根据上面的描述,令\(u_x\)\(x\)这个值的答案。\(u\)的计算,仅需我们对于每个\(x\)枚举其倍数\(n\),然后令\(s_n\leftarrow \max(s_n,d)\)即可。

最后依次输出\(s_{a_i}\)即可。

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

点击查看代码
#include<bits/stdc++.h>
#define N 1200010
#define V 1000010
using namespace std;
int n,k,a[N],s[V],u[V];
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i],s[a[i]]++;for(int i=1;i<V;i++){int t=0;for(int j=i;j<V;j+=i) t+=s[j];if(t>=k) for(int j=i;j<V;j+=i) u[j]=i;}for(int i=1;i<=n;i++) cout<<u[a[i]]<<"\n";return 0;
}

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

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

相关文章

如何接入sbus航模遥控器?

买了航模遥控器不会用sbus?快来快来我来教你呀(滑稽如何接入sbus航模遥控器? 最近队内大疆的遥控器短缺,故自行购买一款便宜好用的遥控器来替代,但是协议与dbus不同,研究了一阵子,所以诞生了这一篇文章来帮助大家少走弯路。 遥控器构成 一般都有发射端和接收端:发射端为…

2/15图论浅讲(知识点)

2/15图论浅讲(知识点) (后期会转移博客,所以排版不太好) 前置知识-vector 动态数组 操作1:创建一个动态数组 vector<数据类型> 数组名字操作2:插入元素 O(logn) 方式1:q.push_back(数据);在数组最后面塞数据 方式2:q.insert(q.begin()+i,a);i为下标,将a数据插入…

char**指针与const

1,char**char c = 0;char* p1 = &c; //p1是一个指针变量, 存放的是char类型变量的地址 *p1 = 1; const char* p2 = &c; //p1是一个指针变量, 存放的是char类型变量的地址, const修饰*, 表示指针内容(*p2)不可变char** p3; //p3是一个指针变量, 存放的是char*类型变量的…

升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框架: Vue3+Spring Boot3) ,界面功能t升级(四 )

升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框架: Vue3+Spring Boot3) ,界面功能t升级(四 ) 工作台 系统 商品 客户 门店 订单

(自适应手机端)英文外贸网站模板 日用百货网站源码下载

(自适应手机端)英文外贸网站模板 日用百货网站源码下载 PbootCMS内核开发的网站模板,该模板适用于外贸网站模板、日用百货网站源码等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应移动端,同一个后台,数据即时同步,简单适用!附带测试数据!友好…

Markdown 语法学习

Markdown 语法学习 标题: # + 三级标题 四级标题 字体 hello,world! hello,world! hello,world! hello,world! 引用选择狂神说Java>这是引用分割线图片超链接 博客园 - 开发者的网上家园) 列表A B CA B C表格名字 性别 生日张三 男 1997.1.1李斯 女 1995.7.6代码hello

一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法

1.算法仿真效果 本课题是针对博主原来写的文章《基于MATLAB的一级倒立摆控制仿真,带GUI界面操作显示倒立摆动画,控制器控制输出》的升级。升级内容包括如下几个方面:增加了PI控制器,PD控制器,同时对极点配置,线性二次型,PID,PI及PD五种算法的控制输出曲线进行对比。matlab2…

使用Spring Initializr方式构建Spring Boot项目

按教材 下例选用IntelliJ IDEA 2024.3.3付费版 创建项目JDK版本根据实际情况。启动类简析 package com.example.demo; // 这段代码位于 com.example.demo 这个包下import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBo…

未注册类。WSL 安装似乎已损坏。WslRegisterDistribution failed with error: 0x8007019e/

前言 不知何时,我的wsl环境又坏了。 其实wsl我不怎么用,但是今天突然想用一下docker,但是没有启动成功。 于是乎我试了一下wsl,发现是wsl完全坏了。 之前卸载过wsl的某个子系统,比如ubuntu22,当初想着换24,之后很长一段时间没用过wsl。 尽管我怀疑是这个操作造成的问题,…

清华大学最新力作,DeepSeek 从入门到精通PDF

前几天,我发布了一篇关于 WPS 集成 DeepSeek 的教程,没想到大家的反响非常热烈!很多朋友都表示,通过这篇教程学到了不少关于 DeepSeek 的实用技巧,赶紧点进来看。不过,今天我给大家带来了更猛的干货——清华大学最新发布的 DeepSeek 资料!而且这次的资料更加关注 DeepSe…

安装程序无法自动安装virtual machine

安装VMware Tools 失败 发现在给过旧的系统安装 安装VMware Tools 的时候,会失败,比如 win7、win server2008等。原因 官网的说明,在这里 看不懂的自行翻译: 微软已将 Windows 驱动程序签名更改为自 2019 年 12 月 3 日起仅使用 SHA-2 算法,不支持 SHA-2 代码签名的旧版 W…

尝试在 Kubernetes 集群上用阿里云 GPU 实例部署 Ollama + DeekSeek-R1

在前一篇博文中尝试了使用阿里云 GPU 实例 ECS 单机部署了 DeekSeek-R1 7b 模型 。这篇博文记录一下在 k8s 集群上用阿里云 GPU 实例部署 DeekSeek R1 大模型的尝试过程,部署的也是 deepseek-r1:7b 模型。 先准备一台阿里云 GPU 实例,选用了共享型 GPU 实例 sgn7i,8核31G,4…