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

河南农业大学2023春蓝桥杯赛前训练第一场

A 滑板上楼梯

贪心

要求最少次数,尽量多跳三阶的,不能连续跳三阶,三阶后面一定要跟着一个一阶,相当于直接跳四阶
每次跳四阶都是两步(3、1),如果 % 4 之后,正好剩下 3 ,则直接跳一个三阶,否则要一阶一阶跳

import java.util.Scanner;public class Main {private static int N;private static long n;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextLong();long ans = 0;ans += n / 4;ans *= 2;n %= 4;if (n == 3) ans += 1;else ans += n;System.out.println(ans);}
}

B 牛牛的加法

字符串模拟加法

两个字符串分别存储两个数字,因为没有进位,直接从最长的字符串的最后,倒序处理即可,每次取和的模

/*** @author :Changersh* @date : 2023/1/14 15:44*/import java.io.*;
import java.util.*;
import java.lang.*;public class Main {private static int N = (int) 2e5 + 10;private static String s;private static int[] a = new int[N], b = new int[N];public static void main(String[] args) {s = sc.next();int x = s.length();for (int i = 0, j = x - 1; j >= 0; j--, i++) {a[i] = s.charAt(j) - '0';}s = sc.next();int y = s.length();for (int i = 0, j = y - 1; j >= 0; j--, i++) {b[i] = s.charAt(j) - '0';}int len = Math.max(x, y);for (int i = 0; i < len; i++) {a[i] = (a[i] + b[i]) % 10;}while (len > 0 && a[len - 1] == 0) len--;for (int i = len - 1; i >= 0; i--) out.print(a[i]);if (len == 0) out.println(0);out.close();}
}

C 石子合并

贪心

两堆合并,得到的价值是两堆价值的和,并且拿走少的那堆,求最大价值
把所有的都和最大的那个合并即可
注意:会溢出,要用 long

import java.util.*;public class Main {private static int N = (int) 2e5 + 10, n, m, k;private static int[] a;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();a = new int[n];for (int i = 0; i < n; i++) a[i] = sc.nextInt();Arrays.sort(a);long ans = 0, t = a[n - 1];for (int i = 0; i < n - 1; i++) ans += (t + a[i]);System.out.println(ans);}
}

D 黑白边

kruskal + 并查集

用 0 代表黑边,我们就按这个排序,优先选择所有的黑边,然后按大小遍历所有的边。
如果该边的两个端点不在同一个集合,就用并查集到同一个集合,cnt++,cnt记录下该集合中的点的个数
ans记录白边个数,因为黑边0,白边1,直接ans+=edge.w 即可

import java.io.*;
import java.util.*;
import java.lang.*;class Edge {public Edge(int x, int y, int w) {this.x = x;this.y = y;this.w = w;}int x, y, w;
}public class Main {private static int N = (int) 2e5 + 10, n, m;private static int[] f = new int[N];private static Edge[] edges;public static void main(String[] args) {n = sc.nextInt();m = sc.nextInt();for (int i = 0; i <= n; i++) f[i] = i; // 初始化edges = new Edge[m];for (int i = 0; i < m; i++) {int x = sc.nextInt();int y = sc.nextInt();int w = sc.nextInt();edges[i] = new Edge(x, y, w);}Arrays.sort(edges, (a, b) -> (a.w - b.w));int cnt = 0, ans = 0;for (int i = 0; i < m; i++) {int fx = find(edges[i].x);int fy = find(edges[i].y);if (fx != fy) {ans += edges[i].w;cnt++;f[fx] = fy;}if (cnt == n - 1) break;}if (cnt == n - 1) out.println(ans);else out.println(-1);out.close();}private static int find(int x) {if (x != f[x]) f[x] = find(f[x]);return f[x];}
}

E 滑板比赛

贪心

将两个人的动作值分别从小到大排序,双指针就行,计算 牛牛大于牛妹的次数

import java.util.*;public class Main {private static int N = (int) 2e5 + 10, n, m;private static int[] a;private static int[] b;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();a = new int[n];b = new int[m];for (int i = 0; i < n; i++) a[i] = sc.nextInt(); // niufor (int i = 0; i < m; i++) b[i] = sc.nextInt(); // meiArrays.sort(a);Arrays.sort(b);int ans = 0, l = 0, r = 0;while (l < n && r < m) {if (a[l] > b[r]) {ans++;l++;r++;} else {l++;}}System.out.println(ans);}
}

F 最好的宝石

不会,线段树

G GCD

线性筛求素数

求长尾 k 的最小子集,每个长为 k 的子集中,都至少有一对 x y,gcd(x,y) > 1
k 肯定大于所有素数的个数,且要包括 1,统计素数的时候把 1 也统计上,得到ans
这个是所有最大公因数是 1 的,此时只要加上一个非素数,即可满足条件

结果 = ans + 1
如果ans > n 不满足,输出 -1
否则,输出 ans

import java.io.*;
import java.util.*;
import java.lang.*;public class Main {private static int N = (int) 1e5 + 10, n, tot;private static int[] p = new int[N];private static boolean[] vis = new boolean[N];/*** ans = 素数个数 + 1* ans > n 时 返回 -1*/public static void main(String[] args) {n = sc.nextInt();euler();  // 筛素数int ans = 1;for (int i = 1; i <= n; i++) {if (!vis[i]) ans++; // 素数 ++}if (ans > n) out.println(-1);else out.println(ans);out.close();}private static void euler() {for (int i = 2; i <= n; i++) {if (!vis[i]) p[tot++] = i;for (int j = 0; j < tot && p[j] <= n / i; j++) {vis[i * p[j]] = true;if (i % p[j] == 0) break;}}}
}

H 第k小

只存储最小的 k 个即可

import java.io.*;
import java.util.*;
import java.lang.*;public class Main {private static int N = (int) 1e5 + 10, n, m, k;private static PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> (-(a - b)));/*** 发现只需要存储前 k 个即可* 倒序存储 只要 size > k 就一直 pop*/public static void main(String[] args) {n = sc.nextInt();m = sc.nextInt();k = sc.nextInt();for (int i = 0; i < n; i++) pq.add(sc.nextInt());int opt;while (m-- > 0) {while (pq.size() > k) pq.poll();opt = sc.nextInt();if (opt == 1) {int x = sc.nextInt();pq.add(x);}else {if (pq.size() == k) out.println(pq.peek());else out.println(-1);}}out.close();}
}

I 小游戏

dp

拿和不拿,两种状态
选择拿,只能拿前面不拿的
选择不拿,在前一个 拿和不拿之间,取一个 max

import java.io.*;
import java.util.*;
import java.lang.*;public class Main {private static int N = (int) 2e5 + 10, n, m;private static int[] a = new int[N];private static long[][] f = new long[N][2]; // 选 / 不选/***  dp,因为范围小,所以遍历整个范围,a[i] 存储的是 值为 i 的数的个数*/public static void main(String[] args) {n = sc.nextInt();for (int i = 0; i < n; i++) {int x = sc.nextInt();a[x]++;}for (int i = 1; i <= 200000; i++) {f[i][0] = Math.max(f[i - 1][0], f[i - 1][1]); // 不选,前一个可选可不选f[i][1] = f[i - 1][0] + a[i] * i;}out.println(Math.max(f[200000][0], f[200000][1]));;out.close();}
}

J 区间异或

二分

区间长度是 3000,可以预处理出来每个区间的异或和,放到b中
b[i] 存的是,区间长度为 i 的最大的异或和

因为要求异或和大于 x 的最小区间,则小区间的异或值如果大于大区间,则是覆盖了大区间的,我们两两取最大值,可以构造出来一个递增的序列,满足了二分答案的条件,对于每此询问,二分答案即可。

import java.io.*;
import java.util.*;
import java.lang.*;public class Main {private static int N = (int) 2e5 + 10, n, m;private static int[] a = new int[N];private static int[] b = new int[N];/*** 预处理:区间的异或和*/public static void main(String[] args) {n = sc.nextInt();m = sc.nextInt();for (int i = 1; i <= n; i++) a[i] = sc.nextInt();// 预处理for (int i = 1; i <= n; i++) {int ans = 0;for (int j = i; j <= n; j++) {ans ^= a[j];b[j - i + 1] = Math.max(b[j - i + 1], ans);}}// 取自己和前面的最大值,得到一个非递减的序列for (int i = 2; i <= n; i++) b[i] = Math.max(b[i], b[i - 1]);while (m-- > 0) {int x = sc.nextInt();if (x > b[n]) {out.println(-1);continue;}int l = 1, r = n;int ans = -1;while (l <= r) {int mid = l + ((r - l) >> 1);if (b[mid] >= x) {r = mid - 1;ans = mid;}else l = mid + 1;}out.println(ans); // 长度从 0 开始了}out.close();}
}

相关文章:

河南农业大学2023春蓝桥杯赛前训练第一场

A 滑板上楼梯 贪心 要求最少次数&#xff0c;尽量多跳三阶的&#xff0c;不能连续跳三阶&#xff0c;三阶后面一定要跟着一个一阶&#xff0c;相当于直接跳四阶 每次跳四阶都是两步&#xff08;3、1&#xff09;&#xff0c;如果 % 4 之后&#xff0c;正好剩下 3 &#xff0c…...

docker-dockerfile

1.常用保留字指令 FROM : 基础镜像MAINTAINER: 维护者姓名和邮箱RUN : Run ["可执行文件"&#xff0c;参数1]&#xff1b; Run [shell命令]EXPOSE: 暴露出的端口号WORKDIR: 登录后的位置USER: 执行用户,默认是rootENV: 构建过程的环境变量ADD: 将宿主机的文件拷贝到…...

【JavaEE】浅识进程

一、什么是进程1.1 操作系统学习进程之前首先要了解我们的操作系统&#xff08;OS&#xff09;&#xff0c;我们的操作系统实际上也是一款软件&#xff0c;属于系统软件的范畴&#xff0c;操作系统早期采用命令提示框与用户交互&#xff0c;我们启动某个软件&#xff0c;打开某…...

Java_Spring:1. Spring 概述

目录 1 spring 是什么 2 Spring 的发展历程 3 spring 的优势 4 spring 的体系结构 1 spring 是什么 Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和 AOP&#xff08;Aspec…...

使用Maven实现第一个Servlet程序

目录 前言&#xff1a; Maven 什么是Maven 创建Maven项目 Mevan目录介绍 Servlet程序 引入Servlet依赖 创建目录结构 编写代码 打包程序 部署程序 验证程序 idea集成Tomcat 下载Tomcat插件 配置Tomcat的路径 Smart Tomcat工作原理 小结&#xff1a; 前言&#…...

【MySQL】MySQL的优化(一)

目录 查看SQL执行频率 定位低效率执行SQL 定位低效率执行SQL-慢查询日志 定位低效率执行SQL-show processlist 查看SQL执行频率 MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以查看服务器状态信息。通 过查看状态信息可以查看对当…...

win kubernetes dashbord部署springboot服务

文章目录前言一、新建springboot工程二、制作镜像1.编写dockerfile2.使用阿里云镜像仓库3.使用dashbord部署服务总结前言 使用win版docker desktop安装的k8s&#xff0c;kubenetes dashbord。 一、新建springboot工程 就是简单一个接口。没什么说的 二、制作镜像 1.编写dock…...

Linux之进程终止

本节目录1.进程终止2.exit与_exit函数1.进程终止 进程终止时&#xff0c;操作系统做了什么&#xff1f; 释放进程中申请的相关内核数据结构和对应的数据和代码。本质就是释放系统资源。 进程终止的常见方式 a.代码跑完&#xff0c;结果正确 b.代码跑完&#xff0c;结果不正确…...

全网独家首发|极致版YOLOv7改进大提升(推荐)网络配置文件仅24层!更清晰更方便更快的改进YOLOv7网络模型

有不少小伙伴和我交流YOLO改进的时候&#xff0c;都说YOLOv7的网络配置文件长达104层&#xff0c;改起来很费力&#xff0c;数层数都要数很久&#xff0c;还很容易出错&#xff0c;而且基于YOLOv5代码架构&#xff0c;Debug起来也确实比较费时&#xff0c;所以博主对YOLOv7网络…...

C++入门 谁都能看懂的类和对象

类 C语言结构体中只能定义变量. 在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。 //c语言 typedef struct ListNode {int val;struct ListNode* next; }LTN; //c struct ListNode {int val;//c中可以直接用这个&#xff0c;不用加structListNode* next…...

C++ STL:string类的模拟实现

目录 前置说明 一. 构造函数和析构函数的模拟实现 1.1 构造函数 1.2 析构函数 二. string类对象容量及成员相关的函数 2.1 获取字符串有效字符数、容量及_str成员变量获取相关函数 2.2 扩容及变长相关函数 2.3 字符串清空和判空函数 三. 运算符重载函数 3.1 赋值运算…...

并发编程---线程池(六)

阻塞队列的应⽤——线程池一 线程池基本概念二 线程池三种常⽤创建⽅式2.1.newFixedThreadPool线程池&#xff1a;2.2.newSingleThreadExecutor线程池&#xff1a;2.3.newCachedThreadPool线程池&#xff1a;2.4. 线程池代码演示三 线程池创建的七个参数四 线程池底层原理理解&…...

【Java实战】不会还有人用if else进行参数校验吧

当请求参数很多&#xff0c;几乎每一个参数都需要后端去兜底校验时&#xff0c;你还在写if else去判断参数是否为空吗&#xff1f;&#xff1f;要校验为空的参数三四个还好&#xff0c;要是十几个&#xff0c;业务逻辑还没开始就写二三十行代码开始堆山了嘛&#xff0c;教给大家…...

深度学习部署(十六): CUDA RunTime API _vector-add 使用cuda核函数实现向量加法

1. 知识点 nthreads的取值&#xff0c;不能大于block能取值的最大值。一般可以直接给512、256&#xff0c;性能就是比较不错的 (input_size block_size - 1) / block_size;是向上取整 对于一维数组时&#xff0c;采用只定义layout的x维度&#xff0c;若处理的是二维&#xff…...

堆结构的两个应用

堆排序 堆结构很大的一个用处&#xff0c;就是用于堆排序了&#xff0c;堆排序的时间复杂度是O(n∗log2n)O(n*log_2n)O(n∗log2​n)量级的&#xff0c;在众多排序算法中所处的地位也是高手级别的了。 但很多人在使用堆排序的时候&#xff0c;首先认为我必须得有一个堆数据结构…...

Java中的 static

1 static 静态变量 1.1 静态变量的使用 static变量也称作静态变量&#xff0c;也叫做类变量 静态变量被所有的对象所共享&#xff0c;在内存中只有一个副本 当且仅当在类初次加载时会被初始化 静态变量属于类 通过类名就可以直接调用静态变量 也可以通过对象名.静态变量…...

基于Vision Transformer的图像去雾算法研究与实现(附源码)

基于Vision Transformer的图像去雾算法研究与实现 0. 服务器性能简单监控 \LOG_USE_CPU_MEMORY\文件夹下的use_memory.py文件可以实时输出CPU使用率以及内存使用率&#xff0c;配合nvidia-smi监控GPU使用率 可以了解服务器性能是否足够&#xff1b;运行时在哪一步使用率突然…...

服务器相关常用的命令

cshell语法 https://www.doc88.com/p-4985161471426.html domainname命令 1&#xff09;查看当前系统域名 domainname2&#xff09;设置并查看当前系统域名 domainname example.com3&#xff09;显示主机ip地址 domainname -Iwhich命令 which 系统命令在 PATH 变量指定的…...

今天是国际数学日,既是爱因斯坦的生日又是霍金的忌日

目录 一、库函数计算 π 二、近似值计算 π 三、无穷级数计算 π 四、割圆术计算 π 五、蒙特卡罗法计算 π 六、计算800位精确值 从2020年开始&#xff0c;每年的3月14日又被定​为国际数学日​&#xff0c;是2019年11月26日​联合国教科文组织​第四十届大会上正式宣布…...

Qt Quick - StackLayout 堆布局

StackLayout 堆布局一、概述二、attached 属性三、例子1. 按钮切换 StackLayout 页面一、概述 StackLayout 其实就是说&#xff0c;在同一个时刻里面&#xff0c;只有一个页面是展示出来的&#xff0c;类似QStackWidget 的功能&#xff0c;主要就是切换界面的功能。这个类型我…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...