Acwing 周赛132 解题报告 | 珂学家 | 并查集 + floyd寻路


前言

在这里插入图片描述


整体评价


A. 大小写转换

Q: 把字符串s统一成小写字母形态

题型:签到

知识点: 考察字符串的API题

c++可以借助transform函数,进行转化

#include <bits/stdc++.h>using namespace std;int main() {string s;cin >> s;// 把自己转化为小写/大写态// tolower/touppertransform(s.begin(), s.end(), s.begin(), ::tolower);cout << s << endl;return 0;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;public class Main {public static void main(String[] args) {AReader sc = new AReader();String s = sc.next();System.out.println(s.toLowerCase());}staticclass AReader {private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));private StringTokenizer tokenizer = new StringTokenizer("");private String innerNextLine() {try {return reader.readLine();} catch (IOException ex) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String nextLine = innerNextLine();if (nextLine == null) {return false;}tokenizer = new StringTokenizer(nextLine);}return true;}public String nextLine() {tokenizer = new StringTokenizer("");return innerNextLine();}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}//        public BigInteger nextBigInt() {
//            return new BigInteger(next());
//        }// 若需要nextDouble等方法,请自行调用Double.parseDouble包装}}

B. 不合群数

Q: 不能被 [2, a]范围内的数整除的数,被称为不合群数, 求[2, b]内最大的不合群数

思路: 枚举

核心就是,一个前置的知识点:

10 亿内的最大质数是 999999937 ,且相邻质数之间的差值均不超过 300 10 亿内的最大质数是 999999937,且相邻质数之间的差值均不超过 300 10亿内的最大质数是999999937,且相邻质数之间的差值均不超过300

因为大于a的质数,一定是不合群数,而每300数,必然有一个质数存在。因此找到这个质数即可。

从b开始,从大到小进行枚举,判定即可。

当然不见得质数才满足需求

比如

input
5 50output
49
# 因为49=7*7, 其不被[2, 5]区间的数整除

但是质数,给了枚举范围的上限值,所以这是一道很有趣的题。

#include <bits/stdc++.h>using namespace std;using int64 = int64_t;// 判定质数, O(sqrt(n))
bool judge(int64 v, int64 a) {if (v <= a) return false;for (int64 i = 2; i <= v / i && i <= a; i++) {if (v % i == 0) {return false;}}return true;
}int main() {int64 a, b;cin >> a >> b;int64 res = -1;for (int64 i = b; i >= max(b - 300, a + 1); i--) {if (judge(i, a)) {res = i;break;}}cout << res << endl;return 0;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;public class Main {static boolean isPrime(long v) {if (v <= 1) return false;for (int i = 2; i <= v / i; i++) {if (v % i == 0) return false;}return true;}public static void main(String[] args) {AReader sc = new AReader();long a = sc.nextLong(), b = sc.nextLong();long res = -1;for (long i = b; i > a && i >= b - 300; i--) {// a^2if (isPrime(i)) {res = i;break;}if (i >= a * a) {boolean ok = true;for (int j = 2; j <= a; j++) {if (i % j == 0) {ok = false;}}if (ok) {res = i;break;}}}System.out.println(res);}staticclass AReader {private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));private StringTokenizer tokenizer = new StringTokenizer("");private String innerNextLine() {try {return reader.readLine();} catch (IOException ex) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String nextLine = innerNextLine();if (nextLine == null) {return false;}tokenizer = new StringTokenizer(nextLine);}return true;}public String nextLine() {tokenizer = new StringTokenizer("");return innerNextLine();}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}//        public BigInteger nextBigInt() {
//            return new BigInteger(next());
//        }// 若需要nextDouble等方法,请自行调用Double.parseDouble包装}}

C. 最短距离

Q: 在一个无向图中,同类点需保证任意两点间最短距离为0,然后求非同类点的距离矩阵

思路: 图论+缩点思路

这边不是tanjar求缩点,

借助并查集来合并 借助并查集来合并 借助并查集来合并

把边长为0的两点进行合并,这样就能快速判定是否满足第一个条件(注意借桥搭路)

然后根据缩点后,进行路径的压缩k*k

跑一遍floyd就可以出来了

#include <bits/stdc++.h>using namespace std;class Dsu {
public:Dsu(int n) : n(n), arr(n + 1) {}int find(int u) {if (arr[u] == 0) return u;return arr[u] = find(arr[u]);}void merge(int u, int v) {int ai = find(u), bi = find(v);if (ai != bi) {arr[ai] = bi;}}bool isSame(int u, int v) {return find(u) == find(v);}private:int n;vector<int> arr;
};int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m, k;cin >> n >> m >> k;vector<int> cats(k);for (int i = 0; i < k; i++) {cin >> cats[i];}Dsu dsu(n);vector<array<int, 3>> edges;for (int i = 0; i < m; i++) {int u, v, w;cin >> u >> v >> w;edges.push_back({u, v, w});if (w == 0) {dsu.merge(u, v);}}bool ok = true;int start = 1;vector<int> mp(n + 1);for (int i = 0; i < cats.size(); i++) {for (int j = start + 1; j < start + cats[i]; j++) {if (!dsu.isSame(start, j)) {ok = false;break;}}for (int j = start; j < start + cats[i]; j++) mp[j] = i;start = start + cats[i];}if (!ok) {cout << "No" << endl;} else {cout << "Yes" << endl;int inf = -1;vector<vector<int>> path(k, vector<int>(k, -1));for (int i = 0; i < k; i++) path[i][i] = 0;for (auto e: edges) {int u = mp[e[0]],  v = mp[e[1]];if (path[u][v] == -1 || path[u][v] > e[2]) {path[u][v] = path[v][u] = e[2];}}for (int i = 0; i < k; i++) {for (int j = 0; j < k; j++) {if (path[j][i] == -1) continue;for (int t = 0; t < k; t++) {if (path[i][t] == -1) continue;if (path[j][t] == -1 || path[j][t] > path[j][i] + path[i][t]) {path[j][t] = path[j][i] + path[i][t];}}}}for (int i = 0; i < k; i++) {for (int j = 0; j < k; j++) {cout << path[i][j] << " \n"[j == k - 1];}}}return 0;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;public class Main {static class Dsu {int n;int[] arr;int[] gz;public Dsu(int n) {this.n = n;this.arr = new int[n + 1];this.gz = new int[n + 1];Arrays.fill(gz, 1);}int find(int u) {if (arr[u] == 0) return u;return arr[u] = find(arr[u]);}void union(int u,int v) {int ai = find(u), bi = find(v);if (ai != bi) {arr[ai] = bi;gz[bi] += gz[ai];}}int gSize(int u) {return gz[find(u)];}}public static void main(String[] args) {AReader sc = new AReader();int n = sc.nextInt(), m = sc.nextInt();int k = sc.nextInt();int[] arr = new int[k];int acc = 1;TreeMap<Integer, Integer> hash = new TreeMap<>();for (int i = 0; i < k; i++) {arr[i] = sc.nextInt();hash.put(acc, i);acc += arr[i];}long inf = Long.MAX_VALUE / 10;long[][] dp = new long[k][k];for (int i = 0; i < k; i++) {Arrays.fill(dp[i], inf);dp[i][i] = 0;}Dsu dsu = new Dsu(n);for (int i = 0; i < m; i++) {int u = sc.nextInt(), v = sc.nextInt();int x = sc.nextInt();Map.Entry<Integer, Integer> e1 = hash.floorEntry(u);Map.Entry<Integer, Integer> e2 = hash.floorEntry(v);int p1 = e1.getValue(), p2 = e2.getValue();if (p1 == p2) {} else {dp[p1][p2] = Math.min(dp[p1][p2], x);dp[p2][p1] = Math.min(dp[p2][p1], x);}if (x == 0) {dsu.union(u, v);}}boolean check = true;acc = 1;for (int i = 0; i < k; i++) {for (int j = acc; j < acc + arr[i]; j++) {if (dsu.find(acc) != dsu.find(j)) check = false;}acc += arr[i];}if (!check) {System.out.println("No");} else {System.out.println("Yes");for (int i = 0; i < k; i++) {for (int j = 0; j < k; j++) {for (int t = 0; t < k; t++) {if (dp[j][t] > dp[j][i] + dp[i][t]) {dp[j][t] = dp[j][i] + dp[i][t];}}}}for (int i = 0; i < k; i++) {for (int j = 0; j < k; j++) {if (dp[i][j] == inf) dp[i][j] = -1;}System.out.println(Arrays.stream(dp[i]).mapToObj(String::valueOf).collect(Collectors.joining(" ")));}}}staticclass AReader {private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));private StringTokenizer tokenizer = new StringTokenizer("");private String innerNextLine() {try {return reader.readLine();} catch (IOException ex) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String nextLine = innerNextLine();if (nextLine == null) {return false;}tokenizer = new StringTokenizer(nextLine);}return true;}public String nextLine() {tokenizer = new StringTokenizer("");return innerNextLine();}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}//        public BigInteger nextBigInt() {
//            return new BigInteger(next());
//        }// 若需要nextDouble等方法,请自行调用Double.parseDouble包装}}

写在最后

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

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

相关文章

10-Java装饰器模式 ( Decorator Pattern )

Java装饰器模式 摘要实现范例 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构 装饰器模式创建了一个装饰类&#xff0c;用来包装原有的类&#xff0c;并在保持类方法签名完整性的前提下&#xff0c;提供…

陶瓷工业5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

陶瓷工业5G智能制造工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。在陶瓷工业领域&#xff0c;5G智能制造工厂数字孪生可视化平台的应用正在改变着行业的传统生产模式&#xff0c;推动着数字化转型的进程。本文将围绕这一主题展开探讨&#xff0c;分析数字孪生可视化…

配置之道:深入研究Netty中的Option选项

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 配置之道&#xff1a;深入研究Netty中的Option选项 前言Option的基础概念ChannelOption与Bootstrap Option常见的ChannelOption类型ChannelConfig的使用Option的生命周期不同传输协议的Option 前言 在…

Tomcat部署Web服务器及基础功能配置

前言 Tomcat作为一款网站服务器&#xff0c;目前市面上Java程序使用的比较多&#xff0c;作为运维工人&#xff0c;有必要了解一款如何去运行Java环境的网站服务。 目录 一、Java相关介绍 1. Java历史 2. Java跨平台服务 3. Java实现动态网页功能 3.1 servelt 3.2 jsp …

Revit-二开之创建TextNote-(1)

Revit二开之创建TextNote TextNode在Revit注释模块中&#xff0c;具体位置如图所示 图中是Revit2018版本 【Revit中的使用】 Revit 中的操作是点击上图中的按钮在平面视图中点击任意放置放置就行&#xff0c; 在属性中可以修改文字 代码实现 创建TextNode ExternalComm…

Web Tomcat

目录 1 前言2 Tomcat的安装3 Tomcat文件的构成4 Tomcat的使用步骤 1 前言 Tomcat是一个 http(web)的容器&#xff0c;笼统的理解一下所有的网站都叫做web。这个web容器可以把我们的前端(htmlcssjs)和后端(servlet)代码都运行起来。 Tomcat是一个免费的开源的Servlet容器&#…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

【嵌入式学习】网络编程day03.02

一、项目 1、TCP机械臂测试 #include <myhead.h> #define SER_IP "192.168.126.32" #define SER_PORT 8888 #define CER_IP "192.168.126.42" #define CER_PORT 9891 int main(int argc, const char *argv[]) {int wfd-1;//创建套接字if((wfdsocke…

《TCP/IP详解 卷一》第8章 ICMPv4 和 ICMPv6

目录 8.1 引言 8.1.1 在IPv4和IPv6中的封装 8.2 ICMP 报文 8.2.1 ICMPv4 报文 8.2.2 ICMPv6 报文 8.2.3 处理ICMP报文 8.3 ICMP差错报文 8.3.1 扩展的ICMP和多部报文 8.3.2 目的不可达和数据包太大 8.3.3 重定向 8.3.4 ICMP 超时 8.3.5 参数问题 8.4 ICMP查询/信息…

划分开始结束位置设置标记

划分开始结束位置 初始音轨如下图所示 在想开始地方单击左键&#xff0c;长按直到你想要的结束位置松开。就可以划分开始和结束位置 设置标记 方式1 &#xff1a;直接点击该图标 方式二&#xff1a;使用快捷键M 设置标记点可以自定义名称方便检索标记点

javaWebssh酒店客房管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh酒店客房管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

STL容器之string类

文章目录 STL容器之string类1、 什么是STL2、STL的六大组件3、string类3.1、string类介绍3.2、string类的常用接口说明3.2.1、string类对象的常见构造3.2.2、string类对象的容量操作3.2.3、string类对象的访问及遍历操作3.2.4、 string类对象的修改操作3.2.5、 string类非成员函…

车辆维护和燃油里程跟踪器LubeLogger

什么是 LubeLogger &#xff1f; LubeLogger 是一个自托管、开源、基于网络的车辆维护和燃油里程跟踪器。 LubeLogger 比较适合用来跟踪管理您的汽车的维修、保养、加油的历史记录&#xff0c;比用 Excel 强多了 官方提供了在线试用&#xff0c;可以使用用户名 test 和密码 123…

机器学习-4

文章目录 前言数组创建切片索引索引遍历切片编程练习 总结 前言 本篇将介绍数据处理 Numpy 库的一些基本使用技巧&#xff0c;主要内容包括 Numpy 数组的创建、切片与索引、基本运算、堆叠等等。 数组创建 在 Python 中创建数组有许多的方法&#xff0c;这里我们使用 Numpy 中…

14.最长公共前缀

题目&#xff1a;编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串""。 解题思路&#xff1a;横向扫描&#xff0c;依次遍历每个字符串&#xff0c;更新最长公共前缀。另一种方法是纵向扫描。纵向扫描时&#xff0c;从前…

基于tomcat的JavaWeb实现

Tomcat服务器 免费&#xff0c;性能一般的服务器 安装配置 基于Java&#xff0c;故需要配置环境变量&#xff0c;新加系统路径JAVA_HOME&#xff0c;路径为jdk的主目录。 而后打开bin目录下的startup.bat文件出现如下窗口说明配置成功 idea继承tomcat服务器 使用java开发…

Linux 之压缩与解压相关命令的基础用法

目录 1、zip 与 unzip 2、gzip 命令 3、tar 命令 1、zip 与 unzip 在桌面新建一个文件和文件夹用于测试 在 test 目录下有一个 1.txt 文件 我们使用 zip 命令对其压缩 用法&#xff1a; zip 自定义压缩包名 被压缩文件路径位置 zip myon.zip 1.txt 因为我们这里就是在 …

linux_day04

大纲&#xff1a;命令&#xff0c;vim&#xff0c;gcc&#xff0c;编译工具&#xff0c;生成代码&#xff0c;调试&#xff0c;库makefile&#xff0c;系统编程 文件系统&#xff1a;文件属性&#xff0c;文件内容&#xff0c;万物皆文件&#xff08;不在内存中的是文件&#…

ProtoBuf 是什么?

1. 序列化概念 序列化和反序列化 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程称为对象的反序列化。 什么情况下需要序列化 存储数据&#xff1a;当你想把的内存中的对象状态保存到⼀个⽂件中或者存到数…

怎么压缩成mp4视频?

在数字化时代&#xff0c;视频已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;有时候我们可能会遇到视频文件太大的问题&#xff0c;不便于传输、存储或分享。那么&#xff0c;如何将视频压缩成MP4格式&#xff0c;以减小文件大小呢&#xff1f;本文将为您介绍几种简…