Atcoder Beginner Contest 385

比赛链接: Atcoder Beginner Contest 385
Github 链接:ABC385

A - Equally

只有三个数相等或者两个小的数加起来等于最大的数时输出 Y e s Yes Yes,其他时候输出 N o No No

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

#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int a[5];for (int i = 1; i <= 3; i++) cin >> a[i];sort(a + 1, a + 4);if (a[1] + a[2] == a[3] || (a[1] == a[2] && a[2] == a[3])) puts("Yes");else puts("No");return 0;
}

B - Santa Claus 1

按照题意模拟,用 v i s vis vis 数组记录经过的格子,最后统计这些格子中房子 ( @ @ @) 的个数。

时间复杂度: O ( H W + ∣ T ∣ ) O(HW + |T|) O(HW+T) ( ∣ T ∣ |T| T 代表字符串 T T T 的长度)。

#include <bits/stdc++.h>
using namespace std;int h, w, x, y, vis[105][105];
string s[150], t;int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> h >> w >> x >> y;for (int i = 1; i <= h; i++) {cin >> s[i];s[i] = " " + s[i];}cin >> t;for (int i = 0; i < t.size(); i++) {if (t[i] == 'U') {int xx = x - 1, yy = y;if (s[xx][yy] != '#') x = xx, y = yy, vis[xx][yy] = 1;}if (t[i] == 'D') {int xx = x + 1, yy = y;if (s[xx][yy] != '#') x = xx, y = yy, vis[xx][yy] = 1;}if (t[i] == 'L') {int xx = x, yy = y - 1;if (s[xx][yy] != '#') x = xx, y = yy, vis[xx][yy] = 1;}if (t[i] == 'R') {int xx = x, yy = y + 1;if (s[xx][yy] != '#') x = xx, y = yy, vis[xx][yy] = 1;}}int ans = 0;for (int i = 1; i <= h; i++)for (int j = 1; j <= w; j++)if (vis[i][j] && s[i][j] == '@') ans++;cout << x << ' ' << y << ' ' << ans << endl;return 0;
}

C - Illuminate Buildings

d p i , j dp_{i, j} dpi,j 表示考虑到第 i i i 位,间隔为 j j j 能装饰的建筑物数量。当 h i = h i − j h_i = h_{i - j} hi=hij 时,状态转移方程为 d p i , j = m a x ( d p i , j , d p i − j , j + 1 ) dp_{i, j} = max(dp_{i, j}, dp_{i - j, j} + 1) dpi,j=max(dpi,j,dpij,j+1)

时间复杂度: O ( N 2 ) O(N^2) O(N2)

#include <bits/stdc++.h>
using namespace std;const int N = 3005;
int n, h[N], dp[N][N];int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) cin >> h[i];for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) dp[i][j] = 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {if (i - j && h[i] != h[i - j]) continue;dp[i][j] = max(dp[i][j], dp[i - j][j] + 1);}}int ans = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) ans = max(ans, dp[i][j]);cout << ans << endl;return 0;
}

D - Santa Claus 2

按照题意模拟过程。

找房子的方法:

  • 用两个 v e c t o r vector vector v x vx vx v y vy vy 分别存房子的坐标 ( x , y ) (x, y) (x,y) 和对应的 ( y , x ) (y, x) (y,x) 并进行排序。
  • 在上下移动的时候,利用二分在 v x vx vx 中找出经过的点存入 s e t set set 里面。
  • 在左右移动的时候,利用二分在 v y vy vy 中找出经过的点存入 s e t set set 里面。

时间复杂度: O ( M l o g 2 N ) O(Mlog^2N) O(Mlog2N)

#include <bits/stdc++.h>
using namespace std;#define int long longint n, m, x, y;
set<pair<int, int>> vis;
vector<pair<int, int>> vx, vy;bool cmp(const pair<int, int> &px, const pair<int, int> &py) {return px.first < py.first || (px.first == py.first && px.second < py.second);
}pair<int, int> find(int fi, int sel, int ser, const vector<pair<int, int>> &v) {int L = lower_bound(v.begin(), v.end(), make_pair(fi, sel), cmp) - v.begin();int R = upper_bound(v.begin(), v.end(), make_pair(fi, ser), cmp) - v.begin() - 1;return {L, R};
}signed main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> n >> m >> x >> y;for (int i = 1; i <= n; i++) {int xx, yy;cin >> xx >> yy;vx.push_back({xx, yy}), vy.push_back({yy, xx});}sort(vx.begin(), vx.end()), sort(vy.begin(), vy.end());while (m--) {char op; int c;cin >> op >> c;if (op == 'U') {pair<int, int> ans = find(x, y, y + c, vx);for (int i = ans.first; i <= ans.second; i++) vis.insert(vx[i]);y += c;}if (op == 'D') {pair<int, int> ans = find(x, y - c, y, vx);for (int i = ans.first; i <= ans.second; i++) vis.insert(vx[i]);y -= c;}if (op == 'L') {pair<int, int> ans = find(y, x - c, x, vy);for (int i = ans.first; i <= ans.second; i++) vis.insert({vy[i].second, vy[i].first});x -= c;}if (op == 'R') {pair<int, int> ans = find(y, x, x + c, vy);for (int i = ans.first; i <= ans.second; i++) vis.insert({vy[i].second, vy[i].first});x += c;}}cout << x << ' ' << y << ' ' << vis.size() << endl;return 0;
}

E - Snowflake Tree

可以发现在中心点和 x x x 确定之后,整棵雪花树就可以确定下来了。对于每一组中心点和 x x x,整棵雪花树的节点数量为 x × m i n ( d e g 1 ≤ i ≤ x ) + 1 x \times min(deg_{1 \le i \le x}) + 1 x×min(deg1ix)+1,其中 d e g deg deg 表示那 x x x 个节点对应的度数。

按照贪心的思想,我们可以枚举中心点,将中心点相邻的点按照度数从大到小进行排序 ( x x x 相同的情况下 m i n ( d e g 1 ≤ i ≤ x ) min(deg_{1 \le i \le x}) min(deg1ix) 越大,结果越优,所以要取最大的 x x x 个节点)。枚举 x x x,计算出对应的节点数量,就可以找到最大的节点数了。

#include <bits/stdc++.h>
using namespace std;const int N = 3e5 + 10;
int n, ans = 0;
vector<vector<int>> g;
vector<int> deg;signed main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> n;g.resize(n + 1), deg.resize(n + 1);for (int i = 1; i < n; i++) {int u, v;cin >> u >> v;g[u].push_back(v), g[v].push_back(u);deg[u]++, deg[v]++;}for (int i = 1; i <= n; i++) {vector<int> v;for (int j : g[i]) v.push_back(deg[j]);sort(v.begin(), v.end(), [](int x, int y){return x > y;});int num = 0, tot = INT_MAX;for (int j : v) {num++, tot = min(tot, j);ans = max(ans, tot * num + 1);}}cout << n - ans << endl;return 0;
}

F - Visible Buildings

取相邻的两个建筑物,将这两个建筑物的顶点连一条直线,所有之前的截距的最大值就是答案。

为什么要取相邻的:可以证明如果两个建筑物之间还有建筑物,无论中间的建筑物是在直线的上方或者下方,中间的建筑物与两边建筑物的连线至少有一条的截距都大于两端建筑物连线的截距。所以对于同组数据,取相邻的两个建筑物连直线截距一定最大。

对于给定两个建筑物,可以根据建筑物顶点坐标 ( x i − 1 , h i − 1 ) (x_{i - 1}, h_{i - 1}) (xi1,hi1) ( x i , h i ) (x_i, h_i) (xi,hi) ( 2 ≤ i ≤ N 2 \le i \le N 2iN) 算出直线的方程。

直线方程为: y − h i − 1 = h i − h i − 1 x i − x i − 1 ( x − x i − 1 ) y - h_{i - 1} = \frac{h_i - h_{i - 1}}{x_i - x_{i - 1}}(x - x_{i - 1}) yhi1=xixi1hihi1(xxi1),即 y = h i − h i − 1 x i − x i − 1 x + h i − 1 − h i − h i − 1 x i − x i − 1 x i − 1 y = \frac{h_i - h_{i - 1}}{x_i - x_{i - 1}} x + h_{i - 1} - \frac{h_i - h_{i - 1}}{x_i - x_{i - 1}} x_{i - 1} y=xixi1hihi1x+hi1xixi1hihi1xi1

截距为: h i − 1 − h i − h i − 1 x i − x i − 1 x i − 1 h_{i - 1} - \frac{h_i - h_{i - 1}}{x_i - x_{i - 1}} x_{i - 1} hi1xixi1hihi1xi1

#include <bits/stdc++.h>
using namespace std;#define double long doubleconst int N = 2e5 + 10;
int n;
double x[N], h[N], ans = 0.0;
bool ok = false;int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) cin >> x[i] >> h[i];for (int i = 2; i <= n; i++) {double d = h[i - 1] - (h[i] - h[i - 1]) / (x[i] - x[i - 1]) * x[i - 1];if (d >= 0) ok = true;ans = max(ans, d);}if (ok) cout << fixed << setprecision(10) << ans << endl;else cout << -1 << endl;return 0;
}

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

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

相关文章

Html——12. 定义样式和引入样式

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>定义样式和引入样式文件&#xff08;CSS文件&#xff09;</title><style type"text/css">body{font-size: 40px;}</style><link rel"s…

Kafka优势

目录 1. 分布式架构 2. 持久化日志与顺序写入 3. 批量处理 4. 异步提交与压缩 5. 消费者组与并行消费 6. 高效的数据复制 7. 无锁设计与多线程模型 8. 幂等性和事务支持 9. 流处理集成 10. 灵活的配置与调优 总结 1. 分布式架构 多 broker 集群&#xff1a;Kafka 是…

Gitlab17.7+Jenkins2.4.91实现Fastapi/Django项目持续发布版本详细操作(亲测可用)

一、gitlab设置&#xff1a; 1、进入gitlab选择主页在左侧菜单的下面点击管理员按钮。 2、选择左侧菜单的设置&#xff0c;选择网络&#xff0c;在右侧选择出站请求后选择允许来自webhooks和集成对本地网络的请求 3、webhook设置 进入你自己的项目选择左侧菜单的设置&#xff…

pathlib:面向对象的文件系统路径

pathlib:面向对象的文件系统路径 pathlib官方介绍: Python3.4内置的标准库&#xff0c;Object-oriented filesystem paths&#xff08;面向对象的文件系统路径&#xff09; 文章目录 pathlib:面向对象的文件系统路径1. 使用示例1.1 最常用&#xff1a;获取项目目录1.2 遍历一…

Hive练习题16-20

题目16&#xff1a; 同时在线问题 如下为某直播平台主播开播及关播时间&#xff0c;根据该数据计算出平台最高峰同时在线的主播人数。 id stt edt 1001,2021-06-14 12:12:12,2021-06-14 18:12:12 1003,2021-06-14 13:12:12,2021-06-14 16:12:12 1004…

条款19 对共享资源使用std::shared_ptr

目录 一、std::shared_ptr 二、std::shared_ptr性能问题 三、control block的生成时机 四、std::shared_ptr可能存在的问题 五、使用this指针作为std::shared_ptr构造函数实参 六、std::shared_ptr不支持数组 一、std::shared_ptr<T> shared_ptr的内存模型如下图&…

巩义网站建设:如何打造一个成功的企业网站

巩义网站建设是企业发展中至关重要的一环。一个成功的企业网站不仅仅是一个展示产品和服务的平台&#xff0c;更是企业形象和品牌的代表。在建设企业网站时&#xff0c;首先要考虑用户体验。网站的设计应简洁明了&#xff0c;易于导航&#xff0c;让用户能够快速找到他们需要的…

【Maven】聚合与继承

目录 1. 聚合工程 2. 聚合工程开发 3. 继承关系 4. 继承关系开发 5. 聚合与继承的区别 1. 聚合工程 什么叫聚合&#xff1f; 聚合&#xff1a;将多个模块组织成一个整体&#xff0c;同时进行项目构建的过程称为聚合 聚合工程&#xff1a;通常是一个不具有业务功能的”空…

bash shell的条件语句

&#xff5e; script% touch if.sh &#xff5e; script% chmod 755 if.sh1.if-then-fi #!/usr/bin/env bashFOOD$1 if [ $FOOD"apple" ] thenecho The food is $FOOD fi exit 0~ script % ./if.sh apple The food is apple如果要将多条语句写在一行&#xff0c;可以…

猛将:如何在众多信仰中找到属于自己的力量?

Hi&#xff0c;我是蒙&#xff0c;欢迎来到猛将潜意识&#xff0c;带你运用潜意识快速成长&#xff0c;重塑人生&#xff01; 潜意识有猛将&#xff0c;人生再无阻挡&#xff01; 每日一省写作274/1000天 信仰是什么&#xff1f;我们生活在一个信仰流派繁多的时代&#xff0c;…

jwt在express中token的加密解密实现方法

在我们前面学习了 JWT认证机制在Node.js中的详细阐述 之后&#xff0c;今天来详细学习一下token是如何生成的&#xff0c;secret密钥的加密解密过程是怎么样的。 安装依赖 express&#xff1a;用于创建服务器jsonwebtoken&#xff1a;用于生成和验证JWTbody-parser&#xff1…

RDFS—RDF模型属性扩展解析

目录 前言1. 什么是RDFS&#xff1f;1.1 RDFS的核心概念1.2 RDFS与RDF的区别 2. RDFS的基础概念2.1 类&#xff08;Class&#xff09;2.2 属性&#xff08;Property&#xff09;2.3 关系&#xff08;Relation&#xff09;2.4 定义域&#xff08;Domain&#xff09;2.5 值域&…

光滑曲线弧长公式的推导

前言 本文将介绍如何用定积分计算空间中一段光滑曲线的弧长。首先我们会给出光滑曲线以及曲线弧长的定义&#xff0c;然后从定义出发&#xff0c;用求黎曼和的思想推导出弧长的计算公式。 光滑曲线的定义 设平面曲线的参数方程为 { x x ( t ) , y y ( t ) , t ∈ [ T 1 , …

设计一个基于Spring Boot开发的电商网站,部署在阿里云上

系统架构设计&#xff0c;包含网络、部署架构等关键信息&#xff0c;要保证系统的高可用。设计中请明确指出使用的产品名称。 为了设计一个基于Spring Boot开发的电商网站系统架构&#xff0c;并确保其高可用性&#xff0c;以下是一个详细的系统架构设计方案&#xff0c;包含网…

C语言技巧之有条件的累加

什么叫有条件的累加&#xff1f; 主要是依靠循环&#xff0c;一般形式是一个在循环里面遍历&#xff0c;另一个只有达到一定的条件才会累加&#xff08;移动到下一个变量&#xff09;&#xff0c;从言语也能看出来&#xff0c;主要是用在字符串和数组里面的&#xff0c;毕竟链表…

Python基于Django的web漏洞挖掘扫描技术的实现与研究(附源码,文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

数据结构-c++

数据结构 链表设计链表1.进制转换2.顺序表逆置3.链表转置 栈栈的实现 队列队列实现1.逆置队列 二叉树遍历顺序1.树的深度2.左右子树交换3.输出并求出非叶子节点个数 图1.邻接矩阵转换成临界表2.深度优先搜索 查找折半查找算法 排序快速排序 链表 设计链表 #include <iostr…

简单发布一个npm包

将自己封装的组件上传到 npm&#xff0c;并在其他项目中下载并使用&#xff0c;是一个非常有用的技能。看完下面这些你就可以自己完成从封装组件到上传 npm 并使用的全过程。 1: 封装组件 首先&#xff0c;你需要创建一个符合标准的 npm 包。假设你已经写好了组件代码&#xf…

24.try块怎么用 C#例子

这是一个用英语写的try-catch例子 简单来说就是一个try&#xff0c;try里面的代码可能会出错&#xff0c;然后有两个catch&#xff0c;规定了具体的错误是什么 如果发生相应的错误&#xff0c;就会把错误信息存到err里&#xff0c;err.Message是一个字符串格式的提示信息&…

记录命令行操作树莓派Wifi的方式

打开WiFi rfkill unblock wlan 关闭WiFi rfkill block wlan 设置可连接的WiFi 方法一&#xff08;bullseye及以前版本才可用&#xff0c;bookworm版本&#xff09; sudo nano /etc/wpa_supplicant/wpa_supplicant.conf network{ssid"wifi_name"psk"wifi_pas…