当前位置: 首页 > news >正文

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;
}

相关文章:

ABC340 A-F题解

文章目录 A题目AC Code&#xff1a; B题目AC Code&#xff1a; C题目AC Code&#xff1a; D题目AC Code&#xff1a; E题目思路做法时间复杂度AC Code&#xff1a; F题目思路AC Code&#xff1a; A 题目 模拟即可&#xff0c;会循环都能写。 AC Code&#xff1a; #include …...

微软 CMU - Tag-LLM:将通用大语言模型改用于专业领域

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 论文地址&#xff1a;https://arxiv.org/abs/2402.05140 Github 地址&#xff1a;https://github.com/sjunhongshen/Tag-LLM 大语言模型&#xff08…...

Kafka集群安装与部署

集群规划 准备工作 安装 安装包下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1BtSiaf1ptLKdJiA36CyxJg?pwd6666 Kafka安装与配置 1、上传并解压安装包 tar -zxvf kafka_2.12-3.3.1.tgz -C /opt/moudle/2、修改解压后的文件名称 mv kafka_2.12-3.3.1/ kafka…...

C++初阶(十一) list

一、list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点…...

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 卷积神经网络的一些基本概念&#xff1a;图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 1.图像卷积、步长、填充 图像卷积&#xff1a;卷积核矩阵在一个原始图像矩阵上 “从上往下、…...

CMake进行C/C++与汇编混合编程

1. 前提 这篇文章记录一下怎么用CMake进行项目管理, 并用C/C和汇编进行混合编程, 为了使用这项技术, 必须在VS的环境中安装好cmake组件 由于大部分人不会使用C/C与汇编进行混合编程的情况。所以这篇文章并不适用于绝大部分人不会对其中具体细节进行过多叙述。只是做一些简单的…...

缓存预热!真香

预热一般指缓存预热&#xff0c;一般用在高并发系统中&#xff0c;为了提升系统在高并发情况下的稳定性的一种手段。 缓存预热是指在系统启动之前或系统达到高峰期之前&#xff0c;通过预先将常用数据加载到缓存中&#xff0c;以提高缓存命中率和系统性能的过程。缓存预热的目…...

VS中设置#define _CRT_SECURE_NO_WARNINGS的原因和设置方式

原因&#xff1a; 在编译老的用C语言的开源项目的时候&#xff0c;可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数&#xff0c;而报警告和错误&#xff0c;而导致无法编译通过。 解决方案&#xff1a; 我们有两种解决方案&#xff1a; 1、在指定的源文件的开头定…...

【网站项目】155在线考试与学习交流网页平台

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

解决IDEA的Project无法正常显示的问题

一、问题描述 打开IDEA&#xff0c;结果发现项目结构显示有问题&#xff1a; 二、解决办法 File -> Project Structure… -> Project Settings (选Modules)&#xff0c;然后导入Module 结果&#xff1a; 补充&#xff1a; IDEA提示“The imported module settings a…...

CDF和PDF的比较

以下内容来自ChatGPT&#xff0c;科技改变生活 Cumulative Distribution Function (CDF)&#xff08;累积分布函数&#xff09;和 Probability Density Function (PDF)&#xff08;概率密度函数&#xff09;是统计学和概率论中两个重要的概念&#xff0c;用于描述随机变量的性…...

编译基本过程 预处理器

编译基本过程 源代码(main.c)->预处理器(cpp)->编译器(gcc/clang/msvc)->汇编器(as)->链接器(ld)->可执行文件(main.exe) 预处理器 C语言中预处理器&#xff1a;执行预处理命令(文件包含、宏替换、条件编译)处理注释(将所有注释替换为空格)处理续行符(将所有…...

模拟算法.

1.什么是模拟 在信息奥赛中,有一类问题是模拟一个游戏的对弈过程或者模拟一项任务的操作过程.比如乒乓球在比赛中模拟统计记分最终判断输赢的过程等等,这些问题通常很难通过建立数学模型用特定的算法来解决因为它没有一种固定的解法,需要深刻理解出题者对过程的解释一般只能采…...

ClickHouse--10--临时表、视图、向表中导入导出数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.临时表1.1 特征1.2 创建一个临时表 2.视图2.1 普通视图2.2 物化视图 3.向表中导入导出数据3.1 案例 1.临时表 1.1 特征 ClickHouse 支持临时表&#xff0c;临时表…...

Python一些可能用的到的函数系列124 GlobalFunc

说明 GlobalFunc是算网的下一代核心数据处理基础。 算网是一个分布式网络&#xff0c;为了能够实现真的分布式计算&#xff08;加快大规模任务执行效率&#xff09;&#xff0c;以及能够在很长的时间内维护不同版本的计算方法&#xff0c;需要这样一个对象/服务来支撑。Globa…...

python中线程/线程池,进程/进程池的创建

创建子线程 # 创建子线程t1 threading.Thread(targetjob,args(1,))# 执行子线程t1.start()# 等待子线程执行print("waiting threading")t1.join()print("threading done")创建子进程 # 创建子进程p1 multiprocessing.Process(targetjob,args(1,),name&qu…...

【c++】vector的增删查改

1.先定义一个类对象vector 为了防止和库里面发生冲突&#xff0c;定义一个命名空间&#xff0c;将类对象放在命名空间 里面 #include<iostream> using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量&#xff0c;需要一个迭代器&#xff…...

【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——JAVA

1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 1. Java 1. 和 equals的区别 比较基本数据类型是比较的值&#xff0c;引用数据类型是比较两个是不是同一个对象&#xff0c;也就是引用是否指向同 一个对象&…...

JVM-JVM中对象的生命周期

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 对象的创建 常量池检查:检查new指令是否能在常量池…...

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?< , (? , (?<! , (?! 有好多种称呼 (?< , (? , (?<! , (?! 有好多种称呼 , 我称为: 左限定, 右限定, 左否定, 右否定 (?<左限定)    (?右限定)(?<!左否定)    (?!右限定) 再…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...