[题解][更新中]AtCoder Beginner Contest 397(ABC397) A~E

news/2025/3/19 17:41:29/文章来源:https://www.cnblogs.com/Sinktank/p/18774278

A - Thermometer

按题意判断并输出即可。

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

点击查看代码
#include<bits/stdc++.h>
using namespace std;
double x;
signed main(){cin>>x;if(x>=38) cout<<"1\n";else if(x>=37.5) cout<<"2\n";else cout<<"3\n";return 0;
}

B - Ticket Gate Log

\(c\)表示当前位应为哪个字符,初始为i

从左到右遍历每个字符\(s_i\)

  • 如果\(s_i=c\),就将\(c\)取反;
  • 如果\(s_i\ne c\),就累加\(1\)的贡献。

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

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
int ans=0;
char c='i';
signed main(){cin>>s;for(char i:s){if(i==c) c=(c=='i'?'o':'i');else ans++;}cout<<ans+(c=='o')<<"\n";return 0;
}

C - Variety Split Easy

分别令\(lef_i,rig_i\)表示\(A\)长度为\(i\)的前缀和后缀有多少不同的元素。

则答案为\(\max\limits_{i=1}^{n-1} (lef_i+rig_i)\)

\(lef,rig\)可以在遍历过程中,用桶计算出来。

可以用数组、unordered_set等数据结构作为桶。

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

点击查看代码
#include<bits/stdc++.h>
#define N 300010
using namespace std;
int n,a[N],ans;
unordered_set<int> se;
int lef[N],rig[N];
signed main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];se.insert(a[i]);lef[i]=se.size();}se.clear();for(int i=n;i>=1;i--) se.insert(a[i]),rig[i]=se.size();for(int i=1;i<n;i++) ans=max(ans,lef[i]+rig[i+1]);cout<<ans<<"\n";return 0;
}

D - Cubes

因式分解可得:\(x^3-y^3=(x-y)(x^2+xy+y^2)\)

如果我们可以枚举\(d=x-y\),即\(x=d+y\)……

那我们仅需判断\(N=d[(d+y)^2+(d+y)y+y^2]\),即\(3y^2+3dy+(d^2-\frac{N}{d})=0\)是否有正整数解即可。

由于\(x^2+xy+y^2\ge (x-y)^3\),所以\((x-y)^3\le N\),即\(d\le \sqrt[3]{N}\),因此枚举\(d\)的时间复杂度是\(O(\sqrt[3]{N})\)

接下来考虑对于每个\(d\),如何判断是否有整数解。

  • 可以用二次方程求根公式完成判定,时间复杂度为\(O(1)\),不过实现起来比较繁琐;
  • 考虑到二次项、一次项系数都为正,所以上式在\(x>0\)时是单增的,所以我们也可以使用二分法
    显然仅需在\([1,\sqrt N]\)内二分即可,时间复杂度为\(O(\log\sqrt N)\),实现起来较为简单。

代码使用二分法,总时间复杂度为\(O(\sqrt[3]{N}\log\sqrt N)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int solve(int a,int b,int c){int l=1,r=1e9;while(l<r){int x=(l+r+1)>>1;if(a*x*x+b*x+c<=0) l=x;else r=x-1; }return a*l*l+b*l+c==0?l:-1;
}
signed main(){cin>>n;for(int d=1;d*d*d<=n;d++){if(n%d) continue;int y=solve(3,3*d,d*d-n/d);if(~y) cout<<d+y<<" "<<y<<"\n",exit(0);}cout<<"-1\n";return 0;
}

E - Path Decomposition of a Tree

定义\(siz_u\)为子树\(u\)的大小,\(fa_u\)\(u\)的父节点,\(ch_u\)\(u\)的子节点个数。

定义\(t_u=siz_u\bmod k\)。不难发现,其含义就是“为了将子树\(u\)的节点全部用链覆盖,子树\(u\)外最少要用多少个节点”。

比如\(t_u=0\)就表示子树\(u\)的答案为Yes

选定一个节点作为根节点,开始遍历每棵树,对于节点\(u\),不合法的情况显然只有下面\(3\)种:

  • \((\sum\limits_{fa_v=u} [t_v\ne 0])>2\)
  • \((\sum\limits_{fa_v=u} t_v)+1>k\)
  • \(ch_u=2\)\((\sum\limits_{fa_v=u} t_v)\ne k\)

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

点击查看代码
#include<bits/stdc++.h>
#define NN 200010
#define int long long
using namespace std;
int n,k;
vector<int> G[NN];
void add(int u,int v){G[u].emplace_back(v);}
int dfs(int u,int fa){int cnt=0,sum=1;for(int i:G[u]){if(i==fa) continue;int t=dfs(i,u);if(!t) continue;if(cnt==2) cout<<"No\n",exit(0);sum+=t,cnt++;}if(sum>k||(cnt==2&&sum!=k)) cout<<"No\n",exit(0);return sum%k;
}
signed main(){cin>>n>>k;for(int i=1,u,v;i<n*k;i++){cin>>u>>v;add(u,v),add(v,u);}dfs(1,0);cout<<"Yes\n";return 0;
}

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

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

相关文章

20242801 2024-2025-2 《网络攻防实践》第3次作业

20242801 2024-2025-2 《网络攻防实践》第3次作业 一、实验内容使用tcpdump等网络流量分析工具对网络登陆过程进行嗅探,统计登陆通过中访问的ip地址信息。 使用wireshark或科来等网络分析工具,对以TELNET方式登陆BBS过程进行嗅探,查看BBS服务器的ip地址和访问端口,以及使用…

python 实验一(20241116魏铼)

课程:《Python程序设计》 班级: 2411 姓名: 魏铼 学号:20241116 实验教师:王志强 实验日期:2025年3月19日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分析,要有过程) 3.编写程序,练习变量和…

工具-安装uTools搜索工具

安装uTools工具 通过网盘分享的文件:uTools 链接: https://pan.baidu.com/s/10QoYus5aWO3b5bvTZ-c9uw?pwd=sky1 提取码: sky1 使用效果:alt + 空格键

“四预”驱动数字孪生水利:让智慧治水守护山河安澜

近年来,从黄河秋汛到海河特大洪水,从珠江流域性洪灾到长江罕见骤旱,极端天气频发让水安全问题备受关注。如何实现“治水于未发”?数字孪生水利以“预报、预警、预演、预案”(四预)为核心,正在掀起一场水利治理的智慧革命。 一、数字孪生水利:从物理世界到虚拟镜像的跃迁…

Pydantic模型继承解析:从字段继承到多态模型

title: Pydantic模型继承解析:从字段继承到多态模型 date: 2025/3/19 updated: 2025/3/19 author: cmdragon excerpt: 涵盖字段继承、属性覆盖、多态模型等关键机制。将掌握类型安全的继承体系构建方法,实现企业级数据校验方案,避免传统面向对象继承的常见陷阱。 categori…

20242428 实验一《Python程序设计》实验报告

学号20242428《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2424 姓名: 虎岳 学号:20242428 实验教师:王志强 实验日期:2025年3月19日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试…

记录一次PG数据库连接数超最大值问题

报错内容: nested exception is org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections排查手段 : SELECT COUNT(*) FROM pg_stat_activity; 查询活跃的连接 SHOW max_connections; 查询数…

StarRocks 升级注意事项

前段时间升级了生产环境的 StarRocks,从 3.3.3 升级到了 3.3.9,期间还是踩了不少坑所以在这里记录下。因为我们的集群使用的是存算分离的版本,也是使用官方提供的 operator 部署在 kubernetes 里的,所以没法按照官方的流程进入虚拟机手动启停对应的服务。 只能使用 operato…

Grafana 添加官方模板

Refer 官方的模板地址: https://grafana.com/grafana/dashboards/ 1.进入到dashboard页面 2.点击New->Import 3.输入想要导入模板的id或者url地址都行 比如你想导入模板url地址是:https://grafana.com/grafana/dashboards/14584-argocd/ 你就可以填写上面的url地址,也可…

05C++数据类型——教学(2)

四、 数据类型.转换 教学视频 1. 数据类型类型名 类型声明 解释说明整型 int -2147483648 到 2147483647 的范围的整数长整形 long long 比上面大很多很多,这里装不下,具体搜索字符型 char 赋值只能是一个字符,比如 A,必须用单引号,双表示字符串不是字符浮点型 float 也叫…

革新科技!通过EtherCAT与Profinet网关实现温湿度监控,医药设备领域的智能革命来临!

通过网关EtherCAT---Profinet 通讯实现温湿度监控项目背景 某医药企业制药设备采用 EtherCAT 作为主控制总线,负责高速设备控制。温湿度传感器、执行器等环境监控设备基于 Profinet 通讯。 为实现机器整体环境参数的实时采集与集中监控,需要在 EtherCAT 总线与 Profinet 网络…

grafana添加跳转的超链接

1.进入到你想设置链接的dashboard中 2.选中表格-》点击Edit->进入到table 3.找到右侧栏中的 Data links -》add link:输入title和url地址,点击save 4.点击右上角的“Save dashboard”按钮保存 此时,表格中的数据点击时,就可以跳转了。