ABC342A-E题解

文章目录

  • A
    • 题目
    • AC Code:
  • B
    • 题目
    • AC Code:
  • C
    • 题目
    • AC Code:
  • D
    • 题目
    • AC Code:
  • E
    • 题目
    • AC Code:

A

题目

这个 A 题为什么是平时 B 题的分值?

统计每一个字母的出现次数,找到出现次数为 1 1 1 的字母,输出它的位置,完事。

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;
string s;
int cnt[100100];int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> s;int len = s.size();for (int i = 0; i < len; i++) {cnt[s[i] - 'a']++;}for (int i = 0; i < 26; i++) {if (cnt[i] == 1) {for (int j = 0; j < len; j++) {if (s[j] == i + 'a') {cout << j + 1;return 0;}}}}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 n, q;
int p[100100];int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) {cin >> p[i];}cin >> q;while (q--) {int l ,r;cin >> l >> r;int idx1, idx2;for (int i = 1; i <= n; i ++) {if (p[i] == l) idx1 = i;if (p[i] == r) idx2 = i;}cout << (idx1 <  idx2 ? l : r) << '\n';}return 0;
}

C

题目

此题容易被误解成并查集,但是第一个样例就可以 hack 普通并查集做法。

我们直接记录原来字串中那些字母要被替换成另外的字母,一开始所有字母都要被替换成自己,每出现一个替换关系,比如把 a a a 替换成 b b b,我们就寻找原来要替换成 a a a 的字母,将其替换成 b b 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 n, q;
string s;
int f[30];int main() {
//	ios::sync_with_stdio(0);
//	cin.tie(0);
//	cout.tie(0);cin >> n >> s;for (int i = 0; i < 26; i++) f[i] = i;cin >> q;while (q--) {string u, v;cin >> u >> v;int a = u[0] - 'a', b = v[0] - 'a';for (int i = 0; i < 26; i++) if (f[i] == a) f[i] = b;}for (int i = 0; i < n; i ++) cout << char('a' + f[s[i] - 'a']);return 0;
}

D

题目

对于一个完全平方数,我们将其分解质因数,每一个质因数的个数一定是偶数,这个不难理解。

那么如果我们将一个完全平方数乘上另一个完全平方数,结果是完全平方数,这个应该也在你的理解范围里。

根据上一个定理,我们可以推导出:如果一个完全平方数除以另一个完全平方数,如果结果是整数,那么结果也是一个完全平方数。

现在,关键的定理来了:

如果两个数 a a a b b b,他们可以分解为 k ⋅ p k\cdot p kp l ⋅ q l \cdot q lq,其中 k , p , l , q k,p,l,q k,p,l,q 为整数,且 p p p q q q 为完全平方数, p p p q q q 尽可能大,如果 a ⋅ b a\cdot b ab 为完全平方数,那么 k k k 等于 l l l

让我们证明一下,对于结果,除以 p p p q q q 后,剩下 k ⋅ l k\cdot l kl,那么结果一定是一个完全平方数,这个定理可以根据上面说的推导出来。而 k k k l l l 不是完全平方数,只能说明 k k k 等于 l l l。请自行理解,如果 k k k 不等于 l l l,哪里会产生矛盾。

我们就可以预处理出每一个数分解掉所有可被分解的完全平方数,统计剩下每一个数字的个数。对于每一个数字,可以与其他和这个数字相等的组成一对,加上其他数字的个数。对于 0 0 0,加上 2 ( n − 1 ) 2(n-1) 2(n1),因为这个 0 0 0 可以与其他数字组成一组,其他数字也可以与这个数字组成一组。设一共有 x x x 0 0 0,最后答案要减去 x ( x − 1 ) x(x-1) x(x1),因为 0 0 0 0 0 0 之间的连边被重复算了。最后答案除以 2 2 2,去掉重复算的组数,输出就完事了。

特别注意:答案要开长整形!

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, a[200100];
long long ans;
map<long long, long long> cnt;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (long long i = 1; i <= n; i ++) cin >> a[i];for (long long i = 1; i <= n; i ++) {long long tmp = sqrt(a[i]);bool vis = 1;while (vis) {vis = 0;for (long long j = 2; j <= tmp; j++) {if (a[i] % (j * j) == 0) {a[i] /= (j * j);vis = 1;break;}}}}for (long long i = 1; i <= n; i ++) {cnt[a[i]]++;}for (long long i = 1; i <= n; i ++) {if (a[i] == 0) ans += (n - 1) * 2;else ans += cnt[a[i]] - 1;}ans -= cnt[0] * (cnt[0] - 1);cout << ans / 2;return 0;
}

E

题目

要算每一个点到终点的时间,可不可以把所有边逆转方向,再从终点跑一遍最短路?

我们得到在时间限制下每一条路线最后一班车的时间,再跑一遍迪杰斯特拉算法,终点的时间为无穷大,然后让每一个点到达的时间尽量大,去找下一条边时,要乘坐时间不能超过当前时间的列车。如果第一班车都比当前时间晚,就不能乘坐。如果没有跑到一个点,就说明这个点不能到达终点。

注意:要开长整形,由于精度问题,建议全开长整形。

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;
struct edge{long long u, v, w, l, d, k, nxt;long long get(long long t) {if (t < l + w) return -1;return l + min(k - 1, (t - l - w) / d) * d;}
};
edge ed[400100];
long long edcnt, head[200100];
void addedge(long long l, long long d, long long k, long long u, long long v, long long w){edcnt++;ed[edcnt].u = u;ed[edcnt].v = v;ed[edcnt].w = w;ed[edcnt].l = l;ed[edcnt].d = d;ed[edcnt].k = k;ed[edcnt].nxt = head[u];head[u] = edcnt;
}
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;
}long long dis[514114];
long long ans[200100];
void dijkstra() {priority_queue<node> pq;pq.push(node(n, 0x7f7f7f7f7f7f7f7f));while (!pq.empty()) {node now = pq.top();pq.pop();if (ans[now.x] > now.dis) continue;for (int i = head[now.x]; i; i = ed[i].nxt) {int v = ed[i].v;long long t = ed[i].get(now.dis);if (t != -1 && ans[v] < t) {ans[v] = t;pq.push(node(v, t));}}}
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;for (int i = 1; i <= m; i++) {long long l, d, k, c, a, b;cin >> l >> d >> k >> c >> a >> b;addedge(l, d, k, b, a, c);}for (long long i = 1; i <= n; i++) {ans[i] = -1;}ans[n] = 0x7f7f7f7f7f7f7f7f;dijkstra();for (int i = 1; i < n; i++) {if (ans[i] != -1) cout << ans[i] << '\n';else cout << "Unreachable\n";}return 0;
}

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

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

相关文章

计算机网络面经-TCP的拥塞控制

写在前边 前边我们分享了网络分层协议、TCP 三次握手、TCP 四次分手。今天我们继续深入分享一下 TCP 中的拥塞控制。 对于 TCP 的拥塞控制,里边设计到很多细节,平平无奇的羊希望通过这一节能够将这部分内容串通起来,能够让你更深刻的记忆这部分内容。 思维导图 1、什么…

封装(encapsulation)

封装[encapsulation] 封装介绍封装好处封装的实现步骤&#xff08;三步&#xff09;入门案例封装与构造器 封装介绍 封装就是把抽象的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&#xff0c;…

HDL FPGA 学习 - 入门好文,相关网站、开发板、教程推荐

目录 O.0 值得跟着的学习网站 0.25 开源 & 学习 FPGA 开发板 0.5 FPGA 相关好文杂文存放 编辑整理 by Staok&#xff0c;始于 2021.2 且无终稿。转载请注明作者及出处。整理不易&#xff0c;请多支持。 本文件是“瞰百易”计划的一部分&#xff0c;尽量遵循“二项玻”定…

vue项目的前端工程化思路webpack(持续更新中)

写在前面&#xff1a;现在的前端网页功能丰富&#xff0c;特别是SPA&#xff08;single page web application 单页应用&#xff09;技术流行后&#xff0c;JavaScript的复杂度增加和需要一大堆依赖包&#xff0c;还需要解决Scss&#xff0c;Less……新增样式的扩展写法的编译工…

ubuntu 学习

软件包 #查找软件包 apt-cache search qemudpkg-query -L gcc-13-arm-linux-gnueabihfapt-get install bzip2 --yes 参考 Linux下apt-get命令详解&#xff08;安装、卸载、更新、查询软件包&#xff09; - 知乎dpkg-query命令 – 在dpkg数据库中查询软件包 安装gcc工具 a…

JavaScript 进阶01

作用域 局部作用域 局部作用域分为函数作用域和块作用域。 函数作用域 在函数内部声明的变量只能在函数内部被访问&#xff0c;外部无法直接访问。函数执行完毕后&#xff0c;函数内部的变量实际被清空了 块作用域 在 JavaScript 中使用 {} 包裹的代码称为代码块&#xf…

P1443 马的遍历题解

题目 有一个nm的棋盘&#xff0c;在某个点(x,y)上有一个马&#xff0c;要求你计算出马到达棋盘上任意一个点最少要走几步。 输入输出格式 输入格式 输入只有一行四个整数&#xff0c;分别为n,m,x,y。 输出格式 一个nm的矩阵&#xff0c;代表马到达某个点最少要走几步&…

DC与DCT DCG的区别

先进工艺不再wire load model进行静态时序分析&#xff0c;否则综合结果与后端物理电路差距很大&#xff0c;因此DC综合工具也进行了多次迭代&#xff0c;DC工具有两种模式&#xff0c;包括wire load mode和Topographical Mode&#xff0c;也就是对应的DC Expert和DC Ultra。 …

python有哪些应用

Python是一种功能强大且灵活的编程语言&#xff0c;具有广泛的应用领域。以下是Python常见的一些应用&#xff1a; Web开发&#xff1a; Python常用于构建Web应用程序。流行的Web框架包括Django、Flask和Pyramid等&#xff0c;它们提供了强大的工具和库来简化开发过程。 数据科…

unity hub (第一部)初学配置

1、安装Unity Hub 2、设置中文 3、安装编辑器 4、新建项目 5、新建完成后进入编辑器 6、 编辑器设置中文 editPreferencesLanguages选择中文

【Webpack】Webpack 优化

提升开发体验 使用 Source Map 让开发或上线时代码报错能有更加准确的错误提示。 提升 webpack 提升打包构建速度 使用 HotModuleReplacement 让开发时只重新编译打包更新变化了的代码&#xff0c;不变的代码使用缓存&#xff0c;从而使更新速度更快。使用 OneOf 让资源文件…

机器学习基础(五)监督与非监督学习的结合

导语&#xff1a;上一节我们详细探索非监督学习的进阶应用&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;四&#xff09;非监督学习的进阶探索-CSDN博客文章浏览阅读613次&#xff0c;点赞15次&#xff0c;收藏13次。非监督学习像一位探险家&#xff0c;挖掘未标…

C语言实现五子棋小游戏

代码采用C语言编写&#xff0c;结合图形库&#xff0c;实现五子棋小游戏&#xff0c;代码如下&#xff1a; #include<fstream> #include <stdlib.h> #include <graphics.h> #include <stdio.h> #include<bits/stdc.h> #include <windows.h&…

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管&#xff0c;显示输入信号的频率。完成功能仿真后&#xff0c;用AD软件&#xff0c;画出原理图以及PCB。 2.电路设计 输入信号的参数为&#xff1a; 可见&#xff0c;输入为168HZ&#xff0c;测量值为170HZ&#xff0c;误差在可接受的范围内。 3.PCB设…

Bluesky数据采集框架-2

访问保存的数据 到此&#xff0c;自然想到了"我如何访问我保存的数据&#xff1f;"。从bluesky的视角&#xff0c;那真的不是bluesky的关注&#xff0c;但它是一个合理的问题&#xff0c;因此我们将强调一个特定的场景。 注意&#xff1a;本章假设你正在使用databr…

从零开始手写mmo游戏从框架到爆炸(二十)— 战斗系统一

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 规则 我们现在设计并尝试开发战斗系统。战斗系统我们先设定几个规则 1、多人对多人&#xff1a;英雄可以携带宝宝&#xff0c;面对的野怪也可以是成群的&#xff0…

C++ //练习 8.3 什么情况下,下面的while循环会终止?

C Primer&#xff08;第5版&#xff09; 练习 8.3 练习 8.3 什么情况下&#xff0c;下面的while循环会终止&#xff1f; while(cin>>i) /* ... */环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 当输入条件不为真的时候&am…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

【右一的电子笔记】全导航,持续更新...

文章目录 &#x1f4da;计算机基础&#x1f407;高程&#xff08;c&#xff09;&#x1f407;python基础&#x1f407;数据结构&#x1f407;数据库系统概念&#x1f407;计算机网络&#x1f407;计算机组成原理&#x1f407;操作系统 &#x1f4da;大数据&#x1f407;大数据管…

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好&#xff08;易于调试&#xff09;的代码1、优秀的代码2、示范&#xff08;1&#xff09;模拟 strcpy 函数方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;有弊端方法四&#xff1a;对方法三进行优化assert 的使用 方法五…