ABC340 A-F题解

文章目录

  • A
    • 题目
    • AC Code:
  • B
    • 题目
    • AC Code:
  • C
    • 题目
    • AC Code:
  • D
    • 题目
    • AC Code:
  • E
    • 题目
    • 思路
    • 做法
    • 时间复杂度
    • AC Code:
  • F
    • 题目
    • 思路
    • AC Code:

A

题目

模拟即可,会循环都能写。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int a, b, d;int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> a >> b >> d;for (int i = a; i <= b; i += d) cout << i << ' ';return 0;
}

B

题目

这个也是根据题面模拟,存一下序列的长度即可。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int q, a[100100];
int n;int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> q;while (q --) {int op, x;cin >> op >> x;if (op == 1) {n++;a[n] = x;}else {cout << a[n - x + 1] << '\n';}}return 0;
}

C

题目

可以用递归加优化来完成此题。我们让 f ( x ) f(x) f(x) 表示要擦除 x x x 和擦除它产生的数的代价。然后得到:

f ( x ) = f ( x / 2 ) + f ( x − x / 2 ) + x f(x) = f(x/2) + f(x - x / 2) + x f(x)=f(x/2)+f(xx/2)+x

然后为了避免重复计算,用 map 存储 f ( x ) f(x) f(x) 的值。如果这个答案没有被计算就计算这个答案,否则直接返回之前存储的答案。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
long long n;
map<long long, long long> m;
long long f(long long x) {if (x < 2) return 0;if (!m[x]) {if (x % 2) {long long tmp1 = f(x / 2), tmp2 = f(x - x / 2);m[x] = tmp1 + tmp2 + x;}else {long long tmp = f(x / 2);m[x] = tmp + tmp + x;}}return m[x];
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;cout << f(n);return 0;
}

D

题目

把游戏抽象化为一个图,每一个阶段就是一个点,那么连接 i i i i + 1 i + 1 i+1 的边的权值就是 A i A_i Ai,连接 i i i X i X_i Xi 的边的权值就是 B i B_i Bi,然后跑一遍最短路即可。如果没有负权边就不要用 SPFA,容易被卡。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int n, a[200100], b[200100], x[200100];
struct edge{int u, v, w, nxt;
};
edge ed[400100];
int edcnt, head[200100];
void addedge(int u, int v, int w){edcnt++;ed[edcnt].u = u;ed[edcnt].v = v;ed[edcnt].w = w;ed[edcnt].nxt = head[u];head[u] = edcnt;
}
long long dis[200100];
struct node {int x;long long dis;node(int x_, long long dis_) {x = x_;dis = dis_;}
};
bool operator <(node a, node b) {return a.dis > b.dis;
}
bool vis[514114];
void dijkstra() {priority_queue<node> pq;pq.push(node(1, 0));while (!pq.empty()) {int now = pq.top().x;pq.pop();if (vis[now]) {continue;}if (now == n) break;vis[now] = 1;for (int j = head[now]; j; j = ed[j].nxt) {int v = ed[j].v;if (dis[v] > dis[now] + ed[j].w) {dis[v] = dis[now] + ed[j].w;pq.push(node(v, dis[v]));}}}
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int i = 1; i < n; i ++) {cin >> a[i] >> b[i] >> x[i];addedge(i, i + 1, a[i]);addedge(i, x[i], b[i]);}memset(dis, 0x3f, sizeof(dis));dis[1] = 0;dijkstra();cout << dis[n];return 0;
}

E

题目

思路

我们发现,如果序列头尾相连,那么我们每次要放的都是一个连续的区间,可以看题目的 GIF 图自行理解。那么这个题就是区间修改,单点查询,一个典型的线段树或树状数组维护差分数组,我用的线段树。

做法

首先,如果我们的球数大于等于 n n n,那么就可以先放 k n kn kn 个球,将每一个盒子都放 k k k 个,对于剩下不足 n n n 个球,设有 p p p 个球,如果往后 p p p 个盒子没有超过 n n n,就把后 p p p 个盒子每一个盒子放一个球,否则,一直放到第 n n n 个盒子,再从第一个盒子开始,放完剩下的球。

时间复杂度

O ( n log ⁡ 2 ( n ) ) O(n\log_2(n)) O(nlog2(n)),合格。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
long long n, m, a[200100], b[200100];
struct node{long long l, r;long long sum;
};
node t[1600100];
long long maketree(long long l, long long r, long long p) {t[p].l = l;t[p].r = r;if (l < r) {t[p].sum = maketree(l, (l + r) / 2, p * 2);t[p].sum += maketree((l + r) / 2 + 1, r, p * 2 + 1);}else {if (l) t[p].sum = a[l] - a[l - 1];else t[p].sum = 0;}return t[p].sum;
}
void add(long long i, long long k, long long p) {if (t[p].l <= i && t[p].r >= i) t[p].sum += k;else return;add(i, k, p * 2);add(i, k, p * 2 + 1);
}
long long get(long long l, long long r, long long p) {if (l <= t[p].l && t[p].r <= r) return t[p].sum;if (l > t[p].r || t[p].l > r) return 0;return get(l, r, p * 2) + get(l, r, p * 2 + 1);
}
void add1(long long l, long long r, long long k) {add(l, k, 1);if (r + 1 <= n) add(r + 1, -k, 1);
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;for (long long i = 1; i <= n; i++) cin >> a[i];for (long long i = 1; i <= m; i++) cin >> b[i];for (long long i = 1; i <= m; i++) b[i]++;maketree(1, n, 1);for (long long i = 1; i <= m; i ++) {long long tmp = get(1, b[i], 1);add1(b[i], b[i], -tmp);long long tmp1 = tmp / n;add1(1, n, tmp1);long long tmp2 = tmp % n;if (tmp2 > n - b[i]) {add1(b[i] + 1, n, 1);add1(1, tmp2 - (n - b[i]), 1);}else {add1(b[i] + 1, b[i] + tmp2, 1);}}for (long long i = 1; i <= n; i ++) {cout << get(1, i, 1) << ' ';}cout << '\n';return 0;
}

F

题目

如果你知道了以 ( 0 , 0 ) , ( A , B ) , ( C , D ) (0, 0), (A, B), (C, D) (0,0),(A,B),(C,D) 为顶点的三角形的面积为 ∣ A D − B C ∣ 2 \frac{|AD - BC|}{2} 2ADBC,那么这个问题就很好解决了。

思路

题目给定了 X , Y X,Y X,Y,然后吧唧吧唧一大堆,就是想让我们求出一个 A , B A, B A,B,使得 ∣ A Y − B X ∣ 2 \frac{|AY-BX|}{2} 2AYBX 1 1 1,转换一下,就是 ∣ A Y + ( − B ) X ∣ = 1 |AY+(-B)X| = 1 AY+(B)X=1,这不就是典型的扩展欧几里得吗?

我们设 g g g gcd ⁡ ( X , Y ) \gcd(X, Y) gcd(X,Y),如果 g ≥ 3 g \ge 3 g3 那么说明无解,因为当 A X + B Y = gcd ⁡ ( A , B ) AX + BY = \gcd(A,B) AX+BY=gcd(A,B) 时该方程才有解。将 − Y , X -Y, X Y,X 带入上述方程求出 A , B A, B A,B,将 A , B A, B A,B 分别乘上 2 g \frac2g g2 就可以得到正确的答案。因为我们要求 A X + B Y = 2 AX + BY = 2 AX+BY=2,而现在是 A X + B Y = g AX +BY = g AX+BY=g,左右两边同时乘上 2 g \frac2g g2 即可。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
long long x, y;
long long e_gcd(long long a, long long b, long long &x, long long &y) {if (!b) {x = 1ll;y = 0ll;return a;}long long gcd = e_gcd(b, a % b, y, x);y -= a / b * x;return gcd;
}
long long a, b;
long long gcd(long long x, long long y) {if (y == 0ll) return x;return gcd(y, x % y);
}int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> x >> y;          long long g = gcd(x, y);e_gcd(y, -x, a, b);if (abs(g) >= 3ll) {cout << -1ll;return 0;}a *= 2ll / g, b *= 2ll / g;cout << a << ' ' << b;return 0;
}

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

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

相关文章

OpenMVG(特征匹配、照片组重建点云、GPS位置信息、GMS)

目录 1 图像的特征匹配 2 图像中提取GPS位置信息 2.1 写入GPS信息到图像中 2.2 读取带有GPS的图像 3 SIFT/AKAZE/AKAZE_MLDB特征提取对比 4 GMS Filter 5 将球形全景图转换为6个透视视图 6 照片组重建点云 1 图像的特征匹配 #include "openMVG/features/feature.…

Python面向对象学习小记——面向过程VS面向对象

【面向过程就好比你是一个工人&#xff0c;你得亲自去做一个个任务 面向对象就好比你一个包工头&#xff0c;你可以差遣你下面的工人去做】

【网站项目】228高校教师电子名片系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

MyBatis-Plus 实体类里写正则让字段phone限制为手机格式

/* Copyright © 2021User:啾啾修车File:ToupiaoRecord.javaDate:2021/01/12 19:29:12 */ package com.jjsos.repair.toupiao.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomido…

PowerShell搭建vue起始项目

Windows PowerShell搭建vue起始项目 搜索PowerShell,以管理员身份运行。 复制文件夹路径 cd 到这个文件夹位置 命令行创建项目&#xff1a;vue create 项目名 这里写自己的项目名就行&#xff0c;我写的yeb vue create yeb 创建成功后是这样的 有颜色的就是选中的&#xff…

“恶意提起知识产权诉讼行为的法律规制”主题研讨活动成功举办

随着我国社会经济的迅速发展以及创新型国家、知识产权强国建设的不断深入,知识产权在社会生活中正发挥着越来越重要的作用。特别是对于广大市场主体而言,知识产权已经不仅是一种私权利,更成为商业竞争中非常重要的一种手段,由此引发了大量的知识产权诉讼纠纷。此类纠纷中,既有权…

C++ new 和 malloc 的区别?

相关系列文章 C new 和 malloc 的区别&#xff1f; C内存分配策略​​​​​​​ 目录 1.引言 2.区别 2.1.申请的内存分配区域 2.2.类型安全和自动大小计算 2.3.构造函数和析构函数的调用 2.4.异常处理 2.5.配对简便性 2.6.new 的重载 2.7.关键字和操作符 3.总结 1.引…

HACKTHEBOX通关笔记——mango(退役)

信息收集 端口扫描 ┌──(root㉿kali)-[~] └─# nmap -sC -sV -A -p- --min-rate10000 10.129.229.185 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-31 20:44 EST Warning: 10.129.229.185 giving up on port because retransmission cap hit (10). Nmap scan …

【微服务】skywalking自定义告警规则使用详解

目录 一、前言 二、SkyWalking告警功能介绍 2.1 SkyWalking告警是什么 2.2 为什么需要SkyWalking告警功能 2.2.1 及时发现系统异常 2.2.2 保障和提升系统稳定性 2.2.3 避免数据丢失 2.2.4 提高故障处理效率 三、 SkyWalking告警规则 3.1 SkyWalking告警规则配置 3.2 …

(04)Hive的相关概念——order by 、sort by、distribute by 、cluster by

Hive中的排序通常涉及到order by 、sort by、distribute by 、cluster by 一、语法 selectcolumn1,column2, ... from table [where 条件] [group by column] [order by column] [cluster by column| [distribute by column] [sort by column] [limit [offset,] rows]; …

VMware虚拟机网络配置

VMware虚拟机网络配置 桥接模式NAT网络 桥接模式 桥接模式其实就是借助你宿主机上的网卡进行联网和通信&#xff0c;所以相当于虚拟机和宿主机平级&#xff0c;处于同一个网段中。 配置要点&#xff1a; 注意选择正确的宿主机网卡 查看宿主机的网络信息&#xff0c;这些信息指…

[嵌入式AI从0开始到入土]8_在线Gpu环境训练(基于启智ai协作平台)

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

原子变量和原子操作

一、什么是原子操作 通常某一个变量的操作对应的CPU指令是大于一个的&#xff0c;在多线程环境下&#xff0c;为了确保对共享变量的操作在执行时不会被干扰&#xff0c;从而避免竞态条件和死锁等问题&#xff0c;使用原子变量。 原子变量可以看作是一种特殊的类型&#xff0c…

php基础学习之函数

基本概念 是一种语法结构&#xff0c;将实现某一个功能的代码块封装到一个结构中&#xff0c;从而实现代码的重复利用 php函数的定义语法 &#xff08;与C/Java很类似&#xff0c;区别在于没有数据类型&#xff0c;因为php是弱类型语言&#xff09; function 函数名(参数){ //…

会计财税答案怎么查找?推荐你使用这五个公众号和工具 #知识分享#微信

当今社会&#xff0c;随着信息技术的迅猛发展&#xff0c;大学生们在学习过程中面临着各种各样的困难和挑战。而在这些挑战中&#xff0c;面对繁重的作业和复杂的题目&#xff0c;大学生搜题软件应运而生 1.题小聪 这个是公众号 电大国开试题库为主&#xff0c;搜题效率挺高…

Linux 查看 系统基本信息 uname

基本用法&#xff1a; 在终端中输入"uname"即可显示系统的内核名称。 可以结合不同的参数使用&#xff0c;获取更详细的系统信息。 常见参数&#xff1a; “-s”&#xff1a;显示操作系统名称。 “-n”&#xff1a;显示网络节点主机名。 “-r”&#xff1a;显示内核版…

Linux之动静态库

今天我们来讲动静态库&#xff01; 首先我们来粗粒度的划分一下动态库和静态库。 动态库就是只有一份库文件&#xff0c;所有想用该库的文件与改库文件建立链接&#xff0c;然后使用。这样可以提高代码复用率&#xff0c;避免重复拷贝产生没必要的内存消耗。 静态库&#xf…

UART通信中的奇偶校验

UART通信中的奇偶校验&#xff1a;提升数据传输可靠性的简单方法 在微控制器&#xff08;MCU&#xff09;和各种电子设备之间的数据通信领域&#xff0c;UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发传输器&#xff09;协议是一种广泛…

openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL

文章目录 openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL220.1 操作步骤 openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL 系统中有些SQL语句运行了很长时间还没有结束&#xff0c;这些语句会消耗很多的系统性能&…

使用深度学习进行序列分类

目录 加载序列数据 准备要填充的数据 定义 LSTM 网络架构 训练 LSTM 网络 测试 LSTM 网络 此示例说明如何使用长短期记忆 (LSTM) 网络对序列数据进行分类。 要训练深度神经网络以对序列数据进行分类,可以使用 LSTM 网络。LSTM 网络允许您将序列数据输入网络,并根据序列数…