ABC341A-D题解

文章目录

  • A
    • 题目
    • AC Code:
  • B
    • 题目
    • AC Code:
  • C
    • 题目
    • AC Code:
  • D
    • 题目
      • 你以为这就完了?
    • 时间复杂度分析:
    • AC Code:
  • E

A

题目

这个没什么好说的,就先输出一个 1,再输出 n n n01就大功告成了。

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;int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;cout << 1;for (int i = 1; i <= n; i ++) cout << "01";return 0;
}

B

题目

要获取更多 x x x 国货币,只能用 x − 1 x - 1 x1 国货币换。
所以我们可以从 1 1 1 国一直换到 n n 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;
int n;
long long a[200100];
int s[200100], t[200100];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];for (int i = 1; i < n; i ++) cin >> s[i] >> t[i];for (int i = 1; i < n; i ++) {a[i + 1] += t[i] * (a[i] / s[i]);}cout << a[n];return 0;
}

C

题目

你会发现, 50 0 3 < 2 ⋅ 1 0 8 500^3<2\cdot10^8 5003<2108,所以可以暴力枚举高桥所在的位置,如果他行进的过程中没有经过海洋就将答案加一。如果经过海洋了就直接枚举下一个点。

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 h, w, n;
char m[510][510];
string s;
map<char, int> dir;
int dx[4] = {0, 0, -1, 1}, dy[4] = {-1, 1, 0, 0};
int ans;
bool check(int x, int y) {for (int i = 0; i < n; i ++) {int nx = x + dx[dir[s[i]]], ny = y + dy[dir[s[i]]];if (nx > 0 && nx <= h && ny > 0 && ny <= w && m[nx][ny] == '.') {x = nx;y = ny;}else return 0;}return 1;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> h >> w >> n;cin >> s;for (int i = 1; i <= h; i ++) {for (int j = 1; j <= w; j ++) cin >> m[i][j];}dir['L'] = 0, dir['R'] = 1, dir['U'] = 2, dir['D'] = 3;for (int i = 1; i <= h; i ++) {for (int j = 1; j <= w; j ++) {if (m[i][j] == '.') {ans += check(i, j);}}}cout << ans;return 0;
}

D

题目

这个题并不难,但是细节很多,仔细看!我因为一些零碎的细节卡了 40min!

首先,我们先讨论那些“有规律”的部分。我们发现,对于两个数 n n n m m m,在 n m nm nm 范围内有 n + m − 2 × gcd ⁡ ( n , m ) n + m - 2\times\gcd(n, m) n+m2×gcd(n,m) 个数满足只被 n n n m m m 中的一个数字整除。

这个结论怎么来的呢?

首先,对于可以被 n n n 整除的一共有 n m n \frac{nm}{n} nnm m m m 个,可以被 m m m 整除的一共有 n m m \frac{nm}{m} mnm n n n 个。

那么 − 2 × gcd ⁡ ( n , m ) -2\times\gcd(n, m) 2×gcd(n,m) 又是怎么来的呢?

首先, n m nm nm 范围内有 n m n m gcd ⁡ ( n , m ) \frac{nm}{\frac{nm}{\gcd(n, m)}} gcd(n,m)nmnm 个数即 gcd ⁡ ( n , m ) \gcd(n,m) gcd(n,m) 个数可以被 n n n m m m 整除。我们要在可以被 n n n 整除的部分减去它,还要在可以被 m m m 整除的部分减去它。所以是 − 2 × gcd ⁡ ( n , m ) -2\times\gcd(n,m) 2×gcd(n,m)

然后我们就可以将答案直接跳到 n m ( k / ( n + m − 2 gcd ⁡ ( n , m ) ) ) nm(k/(n + m - 2\gcd(n, m))) nm(k/(n+m2gcd(n,m))),此时 k k k 变成 k m o d ( n + m − 2 gcd ⁡ ( n , m ) ) k \mod (n + m - 2\gcd(n, m)) kmod(n+m2gcd(n,m))

我们继续讨论,可以枚举,用 k 1 k1 k1 k 2 k2 k2 两个变量依次跳到答案。如果 k 1 k1 k1 跳的远就跳 k 2 k2 k2,否则跳 k 1 k1 k1。如果两个跳的一样远就都跳依次,这两次不算在跳的次数内。一共跳 k k k 次后,较大的就是满足条件的,加到答案上即可。

你以为这就完了?

如果减掉前面“有规律”的部分后,发现 k k k 等于 0 0 0 时,不加任何特判会输出一个 n m nm nm 的倍数的数。但是我们要的是最大的比上述不合法答案小的答案。此时如果我们把 k k k 设为 n + m − 2 gcd ⁡ ( n , m ) n+m-2\gcd(n, m) n+m2gcd(n,m),答案减去 n m nm nm 就可以解决这个问题。

还有一个很重要的东西:long long

时间复杂度分析:

按最坏情况来说, gcd ⁡ ( n , m ) = 1 \gcd(n, m)=1 gcd(n,m)=1,此时时间复杂度就是 n + m n+m n+m,而且跑不到这么多,所以执行次数不会超过 2 ⋅ 1 0 8 2\cdot10^8 2108,合格。

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, k;
long long gcd(long long x, long long y) {return x % y == 0ll ? y : gcd(y, x % y);
}
long long ans;
long long cnt;
long long cnt1;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m >> k;long long g = gcd(n, m);ans = n * m * (k / (n + m - g * 2));k = k % (n + m - g * 2);if (k == 0) {ans -= n * m;k += n + m - g * 2;}long long k1 = 0ll, k2 = 0ll;cnt1 = 0ll;for (long long i = 1; i <= k; i ++) {if (k1 + n < k2 + m) {k1 += n;}else if (k1 + n > k2 + m) {k2 += m;}else {k1 += n;k2 += m;i--;}}ans += max(k1, k2);cout << ans;return 0;
}

E

什么,不是 A-D题解吗?怎么还有 E?

我才不会给出详细的解法的,我只给一个小小的提示:懒标线段树!

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

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

相关文章

sqlserver 内连接,左连接,右连接,全连接,自连接

在 SQL Server 中&#xff0c;可以使用不同类型的连接来联接两个表或视图。以下是这些连接类型的简要说明&#xff1a; 内连接&#xff08;Inner Join&#xff09;: 内连接是最常用的连接类型&#xff0c;它返回两个表中满足连接条件的行。语法如下&#xff1a; SELECT t1.co…

django中事务和锁

目录 一&#xff1a;事务&#xff08;Transactions&#xff09; 二&#xff1a;锁 在Django中&#xff0c;事务和锁是数据库操作中的两个重要概念&#xff0c;它们用于确保数据的完整性和一致性。下面我将分别解释这两个概念在Django中的应用。 一&#xff1a;事务&#xff…

【软件相关】基于Alist挂载云盘到本地文件资源管理器

文章目录 0 前言1 Alist挂载云盘2 RaiDrive配置3 rclone配置 0 前言 因为最近在研究各种云盘存储影视资源的方法&#xff0c;无意间看到一个教程是利用软件将云盘挂载到本地的资源管理器&#xff0c;这样就能实现类似本地文件操作的方式来操作云盘文件&#xff0c;还是有点意思…

EasyRecovery软件免费版与付费版有哪些功能区别?

免费版的EasyRecovery软件在功能和恢复能力上确实存在一些限制。 首先&#xff0c;在数据恢复方面&#xff0c;免费版通常只能恢复最多1GB的数据。这意味着&#xff0c;如果你需要恢复的数据量超过1GB&#xff0c;你将需要升级到付费版才能完全恢复。 其次&#xff0c;免费版…

车载软件架构 —— Adaptive AUTOSAR软件架构中通信管理、诊断管理策略

车载软件架构 —— Adaptive AUTOSAR软件架构中通信管理、诊断管理策略 第四篇 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(6)特征工程初步

特征工程是一个非常重要的概念&#xff0c;从特征工程可以领会到机器学习的真谛。 特征工程就是从原始数据转换为特征向量的过程。 特征工程的特点&#xff1a; 特征工程是机器学习中很重要的起始步骤&#xff0c;直接影响效果&#xff0c;需要大量的时间。 数据和特征决定了…

MySQL高级特性篇(2)-空间数据类型与GIS的整合

MySQL数据库是一种常用的关系型数据库管理系统&#xff0c;它提供了丰富的数据类型来满足各种应用需求。其中&#xff0c;空间数据类型是MySQL的一项重要功能&#xff0c;与地理信息系统&#xff08;GIS&#xff09;的整合在地理空间数据分析和可视化方面具有重要意义。 空间数…

【Chrono Engine学习总结】5-sensor-5.2-导出lidar数据的方法与原理探究

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 1、Sensor数据生成流程回顾 Chrono里面&#xff0c;sensor的数据生成、可视化、以及保存&#xff0c;都需要单独进行设置才能实现。sensor数据的采集流程如下https:/…

[opencv][windows]cmake opencv opencv_contrib所需的缓存文件下载

这个是windows上源码编译opencvopencv-contrib时候cmake时候缓存文件&#xff0c;只需要将压缩文件夹解压到源码目录下面,cmake-gui上configure时候就不会报错&#xff0c;注意解压后文件夹名字是.cache,文件夹名字不能改变&#xff0c;比如opencv/.cache&#xff0c;有的人解压…

【LeetCode: 429. N 叉树的层序遍历 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Landsat8_C2_SR数据集是经大气校正后的地表反射率数据

数据名称&#xff1a; Landsat8_C2_SR 数据来源&#xff1a; USGS 时空范围&#xff1a; 2020年1月-2023年3月 空间范围&#xff1a; 全国 数据简介&#xff1a; Landsat8_C2_SR数据集是经大气校正后的地表反射率数据&#xff0c;属于Collection2的二级数据产品&#…

Java学习笔记2024/2/17

面向对象综合练习--课程讲解&#xff0c;主理解 练习一&#xff1a;文字版格斗游戏 需求: 格斗游戏&#xff0c;每个游戏角色的姓名&#xff0c;血量&#xff0c;都不相同&#xff0c;在选定人物的时候&#xff08;new对象的时候&#xff09;&#xff0c;这些信息就应该被确…

react反向代理

http-proxy-middleware 使用npm安装 npm i -D http-proxy-middleware 文档 点击查看 关键代码 const { createProxyMiddleware } require(http-proxy-middleware);module.exports function(app) {app.use(/api, // api开头的地址的请求createProxyMiddleware({target: ht…

springboot196高校教师科研管理系统

Spring Boot高校教师科研管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜…

Linux mcopy命令教程:在Linux和MS-DOS之间复制文件(附实例详解和注意事项)

Linux mcopy命令介绍 mcopy是mtools工具包的一部分&#xff0c;它用于在Linux和MS-DOS格式的分区之间复制文件。mcopy可以复制单个文件到指定的文件名&#xff0c;或者复制多个文件到指定的目录中。 Linux mcopy命令适用的Linux版本 mcopy命令在大多数Linux发行版中都可以使…

javascript中的行为委托设计模式【详解】

文章目录 深入探讨 JavaScript 行为委托设计模式什么是行为委托&#xff1f;为何选择行为委托&#xff1f;如何使用行为委托&#xff1f;行为委托的实际应用行为委托的原理行为委托的优点实践应用 深入探讨 JavaScript 行为委托设计模式 JavaScript 是一门灵活且强大的语言&am…

casbin 权限管理库介绍 (规范实现 acl, rbac,abac)等

Casbin介绍 日常开发中我们经常需要设计用户对资源的访问权限控制。我发现手动设计模型、数据库表定义很不规范&#xff0c; 所以进行了一些调研。我发现casbin这个库很大程度上实现了标准化的需求&#xff0c; 牛刀小试引入了公司的一个需求中&#xff0c; 感觉开发效率确实很…

FlashMeeting(基于FFmpeg+openCV)视频语音通讯系统

Web端体验地址&#xff1a;https://download.csdn.net/download/XiBuQiuChong/88805337 客户端下载地址&#xff1a;https://download.csdn.net/download/XiBuQiuChong/88805337 FlashMeeting(基于FFmpegopenCV)是一整套先进的以FFmpegopenCV技术为基础的视频语音通讯系统。利…

ArcGIS学习(八)基于GIS平台的控规编制办法

ArcGIS学习(八)基于GIS平台的控规编制办法 上一任务我们学习了”如何进行图片数据的矢量化?" 这一关我们来学习一个比较简单的案例一一”如何在ArcGIS中录入控规指标,绘制控规图纸?" 首先,先来看看这个案例的分析思路以及导入CAD格式的控规图纸。 接着,来看…

Node.js开发-会话控制

会话控制 1) 介绍2) cookie3) session4) session 和 cookie 的区别5) token 1) 介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议&#xff0c;它没有办法区分多次的请求是否来自于同一个客户端&#xff0c; 无法区分用户 而产品中又大量存在的这样的需求&…