AtCoder Beginner Contest 325 题解 A-E

news2024/12/23 17:32:35

A - Takahashi san

原题链接

题目描述
给你两个字符串,将第二个字符串改为san后与第一个字符串一起输出

public static void solve() throws IOException {
    String s1 = readString(), s2 = readString();
    printWriter.println(s1 + " " + "san");
}

B - World Meeting

原题链接

题目描述
一个公司有 N N N个基地,第 i i i个基地有 W i W_i Wi名员工,该基地所在区域的时间是 X i X_i Xi,现在你是公司老总,想要在 9 : 00 ∼ 18 : 00 9:00 \sim 18:00 9:0018:00 内开一个会议,要求让最多员工参会,求出这个员工数最多能是多少。

思路:模拟

  • 枚举时间偏移量 p p p ( 0 ∼ 23 0 \sim 23 023),再遍历 N N N个基地,求在 p p p的偏移量下能参会的最多员工。
public static void solve() throws IOException {
    int n = readInt();
    Pair[] pairs = new Pair[n + 1];
    for (int i = 1; i <= n; i++) {
        int a = readInt(), b = readInt();
        pairs[i] = new Pair(a, b);
    }
    long max = 0;
    for (int i = 0; i < 24; i++) {
        long cur = 0;
        for (int j = 1; j <= n; j++) {
            int t = (pairs[j].second + i) % 24;
            if (t >= 9 && t <= 17) cur += pairs[j].first;
        }
        max = Math.max(max, cur);
    }
    printWriter.println(max);
}

C - Sensors

原题链接

题目描述
有一个 n n n m m m列的二维网格,网格的部分点上有传感器,传感器会向自己相邻的 8 8 8个方向上的点传染,如果两个传感器相邻,那么他们发挥的作用等于一个传感器,求出最终发挥作用的传感器有多少个。

思路:深度优先搜索

  • 遍历每一个未被遍历过的传感器,让其不断向自己相邻的传感器传染。
static char[][] map;
static boolean[][] vis;
static int n, m;

public static void solve() throws IOException {
    n = readInt(); m = readInt();
    map = utils.nextCharArray(n, m);
    vis=  new boolean[n + 1][m + 1];
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (!vis[i][j] && map[i][j] == '#') {
                cnt++;
                dfs(i, j);
            }
        }
    }
    printWriter.println(cnt);
}
// 偏移量,用于枚举8个方向
static int[] dx = new int[] {-1, -1, 0, 1, 1, 1, 0, -1}, dy = new int[] {0, 1, 1, 1, 0, -1, -1, -1};

public static void dfs(int a, int b) {
    for (int i = 0; i < 8; i++) {
        int nx = a + dx[i], ny = b + dy[i];
        if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny] && map[nx][ny] == '#') {
            vis[nx][ny] = true;
            dfs(nx, ny);
        }
    }
}

D - Printing Machine

题目描述
N N N 份产品在传送带上传送,传送带旁有一台打印机,第 i i i 份产品将在 T i T_i Ti 秒内进入打印机的打印范围内,并在 D i D_i Di 秒内离开打印机。现已知打印机一秒内最多只能打印一份产品,问打印机最多可以打印多少份产品。

思路:贪心+排序

  • 首先对产品进入打印机打印范围的时间升序排序,方便多个打印机同时入队。
  • 用一个优先队列(小顶堆)贪心地维护产品离开打印机的时间,让离开时间早的尽早打印。
public static void solve() throws IOException{
    int n = readInt();
    Pair[] pairs = new Pair[n + 1];
    for (int i = 1; i <= n; i++) {
        pairs[i] = new Pair(readLong(), readLong());
    }
    // 按进入打印机时间升序排序,方便入队
    Arrays.sort(pairs, 1, n + 1, (a, b) -> Long.compare(a.first, b.first));
    // 按离开打印机的时间升序排序
    PriorityQueue<Long> queue = new PriorityQueue<>();
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
        queue.offer(pairs[i].first + pairs[i].second);
        // 进入打印机的时间相同,同时入队
        while (i + 1 <= n && pairs[i + 1].first == pairs[i].first) {
            queue.offer(pairs[i + 1].first + pairs[i + 1].second);
            i++;
        }
        long t = pairs[i].first;
        long bound = i + 1 <= n ? pairs[i + 1].first : Long.MAX_VALUE;
        // 在下一个产品来临之前打印
        while (queue.size() > 0 && t < bound) {
            long endTime = queue.poll();
            if (t <= endTime) {// 可以在对应时间离开打印机
                t++;
                cnt++;
            }
        }
    }
    printWriter.println(cnt);
}

E - Our clients, please wait a moment

题目描述
某国有 N N N 座城市,你要从 1 1 1号城市到达 N N N号城市。现在有两种交通工具可供选择:公司汽车和火车。从城市 i i i 到城市 j j j 所需的时间如下:

  • 乘公司汽车需 D i , j × A D_{i,j} \times A Di,j×A 分钟
  • 乘火车需 D i , j × B + C D_{i,j} \times B + C Di,j×B+C分钟

你可以从公司汽车换乘火车,但不能反之,而且你可以不花时间换乘。问从城市 1 1 1到城市 N N N最少需要多少分钟?

思路:分层图最短路+链式前向星存图

  • 构造三条边,① i → j i \to j ij,距离为 D i , j × A D_{i,j} \times A Di,j×A i → ( i + n ) i \to (i + n) i(i+n),距离为 0 0 0 ( i + n ) → ( j + n ) (i + n) \to (j + n) (i+n)(j+n),距离为 D i , j × B + C D_{i,j} \times B + C Di,j×B+C
    更复杂的分层图类似长下面这样,每两层之间至少有两个点相连
    在这里插入图片描述
static int[] head;
static long[] d;
static Edge[] edges;
static int n, a, b, c;
static boolean[] st;

public static void solve() throws IOException{
    n = readInt(); a = readInt(); b = readInt(); c = readInt();
    head = new int[n * 2 + 10];
    edges = new Edge[(2 * n) * (2 * n) + 10];
    Arrays.setAll(edges, edge -> new Edge());
    d = new long[n * 2 + 10];
    Arrays.fill(d, Long.MAX_VALUE);
    st = new boolean[n * 2 + 10];
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            int d = readInt();
            add(i, j, 1l * d * a);// 坐汽车
            add(i , i + n, 0l);// 两层之间建边,消费为0
            add(i + n, j + n, 1l * d * b + c);// 坐火车
        }
    }
    dijkstra();

    printWriter.println(Math.min(d[n], d[2 * n]));
}

public static void dijkstra() {
    PriorityQueue<long[]> queue = new PriorityQueue<>((a, b) -> Long.compare(a[1], b[1]));
    d[1] = 0;
    queue.offer(new long[] {1, 0});
    while (queue.size() > 0) {
        int t = (int) queue.poll()[0];
        if (st[t]) continue;
        st[t] = true;
        for (int i = head[t]; i != 0; i = edges[i].pe) {
            int to = edges[i].to;
            long w = edges[i].w;
            if (d[to] > d[t] + w) {
                d[to] = d[t] + w;
                queue.offer(new long[] {to, d[to]});
            }
        }
    }
}

public static void add(int a, int b, long c) {
    edges[idx] = new Edge(b, head[a], c);
    head[a] = idx++;
}

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

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

相关文章

spring懒加载

简介 Spring默认会在容器初始化的过程中&#xff0c;解析xml或注解&#xff0c;创建配置为单例的bean并保存到一个map中&#xff0c;这样的机制在bean比较少时问题不大&#xff0c;但一旦bean非常多时&#xff0c;spring需要在启动的过程中花费大量的时间来创建bean &#xff0…

Postman笔记

文章目录 1.安装2.简介和使用流程3 postman使用3.1 测试集与HTTP请求发送HTTP请求和分析响应数据 3.2 发送HTTP请求和分析响应数据3.3 Postman中请求体提交方式3.4 Postman使用之接口测试3.5 使用Postman新建一个mock服务3.6 请求数据的参数化3.7 断言与脚本导出 1.安装 官网地…

外汇天眼:过度交易是大忌,交易不是越多越好!

过度交易是交易中的大忌&#xff0c;因为交易并不是越多越好。为什么我们倾向于将交易失败归因于心态呢&#xff1f;这可能是因为我们认为一笔交易成功和失败的概率都是50%&#xff0c;从而让人们误以为他们具备盈利的能力。然而&#xff0c;如果我们具备盈利的能力&#xff0c…

【Java基础学习打卡21】流程控制

目录 前言一、流程控制的重要性二、流程控制结构1.顺序结构2.分支结构3.循环结构 三、顺序结构总结 前言 无论是哪种编程语言&#xff0c;都会提供流程控制结构&#xff1a;顺序结构、分支结构和循环结构。其实计算机之所以能够完成很多自动化的任务目标&#xff0c;因为它可以…

Flutter笔记:图片的 precacheImage 函数

Flutter笔记 图片的 precacheImage 函数 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134004572 【简…

执行 SQL 响应比较慢,你有哪些排查思路?

排查思路 如果执行 SQL 响应比较慢&#xff0c;我觉得可能有以下 4 个原因&#xff1a; 第 1 个原因&#xff1a;没有索引或者导致索引失效。 第 2 个原因&#xff1a;单表数据量数据过多&#xff0c;导致查询瓶颈第 3 个原因&#xff1a;网络原因或者机器负载过高。 第 4 个原…

JAVA-编程基础-11-02-文件流

Lison <dreamlison163.com>, v1.0.0, 2023.05.07 JAVA-编程基础-11-02-文件流 文章目录 JAVA-编程基础-11-02-文件流File 构造方法File 常用方法获取功能的方法**绝对路径和相对路径****判断功能的方法****创建、删除功能的方法**目录的遍历递归遍历 RandomAccessFile*…

LeetCode66——加一

LeetCode66——加一 题目描述&#xff1a; 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例…

904. Fruit Into Baskets

904. Fruit Into Baskets 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 904. Fruit Into Baskets https://leetcode.cn/problems/fruit-into-baskets/ 完成情况&#xff1a; 解题思路&#xff1a; 连续数组 -…

Unity BatchRendererGroup 在低端设备上也实现高帧率

在这篇文章中&#xff0c;我们描述了一个小型射击游戏样本&#xff0c;它可以动画和渲染几个交互式对象。许多演示只针对高端pc&#xff0c;但这里的目标是在使用GLES 3.0的廉价手机上实现高帧率。这个例子使用了BatchRendererGroup, Burst编译器和c#作业系统。它运行在Unity 2…

Git基础教程

一、Git简介 1、什么是Git&#xff1f; Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同&#…

你是否能应对每天数十亿次的IP访问?Top100查找技术解析

亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热爱技术&#xff0c;热衷分享的IT小伙伴。今天&#xff0c;我要和大家聊一个程序员面试常见的问题&#xff1a;如何在每天海量IP访问的情况下&#xff0c;使用Java找出访问频率最高的Top 100&#xff1f…

【LeetCode刷题-数组】--344.反转字符串

344.反转字符串 使用双指针&#xff1a; class Solution {public void reverseString(char[] s) {int l 0,r s.length-1;while(l<r){char c s[l];s[l] s[r];s[r] c; l;r--;}} }

鸿蒙HarmonyOS应用开发:多码识别

华为HMS Core的扫码接口更适用于简单的个人使用。在商业环境&#xff0c;如货架、医用试管、图书馆书架等&#xff0c;常常遇到复杂的多码扫描需求&#xff0c;这时需要专业的扫码SDK。尽管当前市场上的主流商业SDK尚未支持鸿蒙HarmonyOS&#xff0c;但我们仍可以通过HTTP请求来…

「干货分享」如何使用CLion轻松解决C++开发者的7大痛点

CLion是一款专为开发C及C所设计的跨平台IDE&#xff0c;它是以IntelliJ为基础设计的&#xff0c;包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C&#xff0c;同时它还使用智能编辑器来提高代码质量、自动代码重构并且…

【UE】一个扫描效果(不使用后期处理体积)

效果 步骤 一、制作扫描效果 1. 在3dsmax中新建一个圆形 设置半径为50mm&#xff0c;勾选“自适应” 转换为可编辑多边形 导出 2. 打开虚幻编辑器&#xff0c;导入制作好的模型 3. 创建一个材质&#xff0c;这里命名为“M_Sphere” 打开“M_Sphere”&#xff0c;添加一个“V…

PCIe总线中Root Complex(RC)

在不同的处理器系统中&#xff0c;RC的实现有较大差异。PCIe总线规范并没有规定RC的实现细则。在有些处理器系统中&#xff0c;RC相当于PCIe主桥&#xff0c;也有的处理器系统也将PCIe主桥称为PCIe总线控制器。而在x86处理器系统中&#xff0c;RC除了包含PCIe总线控制器之外&am…

C语言:实现对单链表的反转 函数封装

需求&#xff1a; 实现对单链表的反转 代码实现&#xff1a; #include <stdio.h>typedef struct node{int data;struct node* next; }NODE;void PrintLink(NODE* phead) {NODE* p phead;while(p ! NULL){printf("%d ",p->data);p p->next;}printf(&…

好商品好内容好运营,图文免佣这些爆单技巧你会吗?

图文带货正在成为抖音电商商家们生意增长的新阵地。不同于平台传统的短视频、直播带货&#xff0c;图文体裁以其用户需求大、消费粘性高、深度互动强、正向反馈好的优势&#xff0c;令商家们看到生意新可能&#xff1b;而几张图背景音乐就能实现图文带货的便捷&#xff0c;也为…

瞬态抑制二极管TVS的核心参数?|深圳比创达电子EMC(上)

TVS二极管具有响应速度快、漏电流小、钳位电压稳以及无寿命衰减的特性&#xff0c;从小到信号线静电防护&#xff0c;大到电力系统抗雷击浪涌&#xff0c;TVS都发挥着至关重要的作用。本章对瞬态抑制二极管TVS核心参数展开分析&#xff0c;供产品选型参考。接下来就跟着深圳比创…