第十六届蓝桥杯省赛JavaB组题解

A 逃离高塔

第一道填空题很简单,根据题意跑一边循环即可,一共是202个符合条件的数

    public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int ans=0;for(long i=0;i<=2025;i++){if((i*i*i)%10==3)ans++;}System.out.println(ans);}

需要注意的是循环变量要定义成long型,不然三次方会爆int,只会得到153个数字

B消失的蓝宝

这题想了一会没思路直接跳过了...

C电池分组

要将数组分成两块,并使它们的异或和相同,直接暴力求解是很繁琐的

异或是同一个比特位上两个数相同则为0,不同为1,要找出异或和相同的两组数,假设已经找到这两组数了,这个时候两个异或和是相同的,对他们做异或运算结果是0

也就是说,假设a^b^c 和d^e是我们找到的两组异或和相同的两组数,那么(a^b^c)^(d^e)=0

而且异或运算满足交换律,所以我们直接对输入的所有数字做异或运算,看最后的结果如果为0就代表满足题意

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int t=0;t=scanner.nextInt();int x=0;while((t--)>0){int n = scanner.nextInt();x=0;for(int i=0;i<n;i++){x^=scanner.nextInt();}if(x==0){System.out.println("YES");}else{System.out.println("NO");}}}
}

不过我在考场上第一时间没有想到这个思路,我是后面回过头来在看的这道题目,我观察了一下题目,发现当某个比特位上出现1的个数为偶数时符合题意,为奇数时则不符合题意,所以我就统计所有数每个比特位上1的个数,如果某个比特位上1的个数为奇数则直接输出NO,否则就是符合题意的,考完后仔细想了一下,也算是歪打正着做对了

当某个位上出现1的个数为偶数个时,这些1的异或和是0,和剩下的0在做异或结果也是0

当某个位上出现1的个数为奇数个时,这些1的异或和是1,和剩下的0在做异或结果为1,那么最后所有数的异或和绝不会为0

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int t=0;t=scanner.nextInt();int x=0;//存储每个比特位上1的个数int[] bit=new int[32];int cnt=0;boolean istrue=true;while((t--)>0){int n = scanner.nextInt();istrue=true;//清空上次结果for(int i=0;i<32;i++){bit[i]=0;}for(int i=0;i<n;i++){cnt=0;x=scanner.nextInt();while(x>0){if((x&1)>0){bit[cnt]++;}x>>=1;cnt++;}}for(int i=0;i<32;i++){if(bit[i]%2==1){istrue=false;}}if(istrue){System.out.println("YES");}else{System.out.println("NO");}}}}

D魔法科考试

 这题没想到太好的思路,直接提前做了一个素数筛,然后两层循环暴力求解,只能过60%测试用例

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//素数筛boolean[] isz=new boolean[40010];isz[1]=true;for(int i=2;i*i<=40001;i++){if(!isz[i]){for(int j=i+i;j<=40001;j+=i){isz[j]=true;}}}int n=scanner.nextInt();int m=scanner.nextInt();int[] a=new int[n];int[] b=new int[m];for(int i=0;i<n;i++){a[i]=scanner.nextInt();}for(int i=0;i<m;i++){b[i]=scanner.nextInt();}int s=0,sum=n+m,ans=0;boolean[] vis=new boolean[sum+1];for(int i=0;i<n;i++){for(int j=0;j<m;j++){s=a[i]+b[j];if(s<=sum&&!isz[s]&&!vis[s]){ans++;vis[s]=true;}}}System.out.println(ans);}
}

E爆破

 刚开始看见又是圆心又是半径的,直接就跳过了,看完后面回过头来发现这就是一个最小生成树

直接暴力选边是不可取的,时间复杂度高不说,无法保证每个圆都连通,题目提到如果两个魔法阵相交,可以一起引爆,可以自己选择连边让孤立的圆与其他圆连接,当时就直接想到了最小生成树

注意,题目中所说两个魔法阵相交的意思是圆心之间的距离小于等于半径之和

解题思路是,将坐标系当作一个图,我们将每个圆当作图中的一个点,以输入的下标当作圆的编号,开始时假设每个圆与其他所有圆都有一个无向边,边长是两圆心之间的距离减去半径之和,也就是想让这两个圆相交的最小代价,假设一共n个圆,那么就有n*(n-1)/2条边,存进数组中根据边长排序,后面利用并查集从小到大选边

相交的两个圆的边长是负数,在处理时不用计入答案,标记后直接跳过就好

import java.util.*;public class Main {public static class edge{private int x;private int y;private double r;public edge(int x, int y, double r){this.x = x;this.y = y;this.r = r;}}private static int[] father;private static int n,m;//初始化public static void init(){father = new int[n+1];for(int i=0;i<father.length;i++){father[i] = i;}}//查找父节点,同时更新父节点信息public static int find(int x){return father[x]==x?x:(father[x]=find(father[x]));}public static double kruskal(edge[] edges){//初始化父亲数组init();double ans=0;int fx=0,fy=0;for(edge e:edges){fx=find(e.x);fy=find(e.y);if(fx!=fy){father[fx]=fy;//大于0时计入答案if(e.r>0){ans+=e.r;}}}return ans;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m=n*(n-1)/2;int cnt=0;int[] x = new int[n];int[] y = new int[n];int[] r = new int[n];edge[] edges = new edge[m];for(int i=0;i<n;i++){x[i] = scanner.nextInt();y[i] = scanner.nextInt();r[i] = scanner.nextInt();}double line=0;int lx=0,ly=0;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){lx=x[i]-x[j];ly=y[i]-y[j];line=Math.sqrt((lx*lx)+(ly*ly))-r[i]-r[j];edges[cnt]=new edge(i,j,line);cnt++;}}//按边的长度从小到大排序Arrays.sort(edges,new Comparator<edge>(){public int compare(edge e1, edge e2) {double x=e1.r-e2.r;if(x<0) return -1;if(x>0) return 1;return 0;}});double ans=kruskal(edges);System.out.printf("%.2f",ans);}
}

剩下的三题不确定思路是否正确,等后面我研究一下再发

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

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

相关文章

汽车车窗升降系统全生命周期耐久性验证方案研究

随着汽车行业的快速发展&#xff0c;消费者对于汽车品质和安全性的要求日益提高。汽车车窗升降系统作为汽车电子系统中的重要组成部分&#xff0c;其可靠性和耐久性直接影响到用户的使用体验和行车安全。车窗升降系统在日常使用中频繁操作&#xff0c;承受着各种复杂的工况&…

嵌入式Linux——8 串口

目录 1.终端&#xff08;tty&#xff09; /dev/tty*&#xff1a;物理/虚拟终端 /dev/pts/*&#xff1a;伪终端 /dev/tty&#xff1a;当前进程的控制终端 /dev/tty0&#xff1a;当前活动的虚拟控制台 2.行规程模式&#xff08;line discipline&#xff09; 比较行规程和原…

Docker日志查看与资源监控指令全解:从基础到高阶运维实践

Docker日志查看与资源监控指令全解&#xff1a;从基础到高阶运维实践 一、日志管理&#xff1a;穿透容器内部的眼睛1.1 基础日志操作核心命令&#xff1a;docker logs日志驱动配置 1.2 高级日志处理JSON日志解析多容器日志聚合 二、资源监控&#xff1a;掌握容器生命体征2.1 实…

初学STM32之编码器测速以及测频法的实现

资料来着江协科技 这篇是编码器测速&#xff0c;江科大的源码在测速的时候&#xff0c;定时器TIM2是一直在跑的&#xff0c;不受其它控的&#xff0c;它就一直隔1S读一次CNT的值。它也不管是否有输入信号。源码程序修改一下是可以实现对PWM信号以测频法的方式读取。 笔者稍微改…

oracle怎么查看是否走了索引

SELECT * FROM CRM_STATION_APPEAL_RESULT WHERE COMPLAINT_ID ce1a1d8f-e2a2-4126-8cb7-14384cb24468; 这是查询语句&#xff0c;怎么看这个查询是否走了索引呢 EXPLAIN PLAN FOR SELECT * FROM CRM_STATION_APPEAL_RESULT WHERE COMPLAINT_ID ce1a1d8f-e2a2-4126-8cb7-14…

C++进阶——C++11_{ }初始化_lambda_包装器

目录 1、{ }初始化 1.1 C98的{ } 1.2 C11的{ } 1.3 C11中的std::initializer_list 总结一下&#xff1a; 2、lambda 2.1 lambda的语法 2.2 捕捉列表 2.3 lambda的应用 2.4 lambda的原理 3、包装器 3.1 function 3.2 bind 1、{ }初始化 1.1 C98的{ } C98中一般数组…

【微知】Mellanox网卡网线插入后驱动的几个日志?(Cable plugged;IPv6 ... link becomes ready)

概要 本文是一个简单的信息记录。记录的是当服务器网卡的光模块插入后内核的日志打印。通过这种日志打印&#xff0c;可以在定位分析问题的时候&#xff0c;知道进行过一次模块插拔。 日志 截图版&#xff1a; 文字版&#xff1a; [32704.121294] mlx5_core 0000:01:00.0…

单片机Day05---静态数码管

目录 一、原理图&#xff1a;​编辑 二、思路梳理&#xff1a; 三&#xff1a;一些说明&#xff1a; 1.点亮方式&#xff1a; 2.数组&#xff1a; 3.数字与段码对应&#xff1a; 四&#xff1a;程序实现&#xff1a; 一、原理图&#xff1a; 二、思路梳理&#xff1a; …

Cesium.js(6):Cesium相机系统

Camera表示观察场景的视角。通过操作摄像机&#xff0c;可以控制视图的位置、方向和角度。 帮助文档&#xff1a;Camera - Cesium Documentation 1 setView setView 方法允许你指定相机的目标位置和姿态。你可以通过 Cartesian3 对象来指定目标位置&#xff0c;并通过 orien…

【Python技术生态全景:十大核心应用领域深度解析】

目录 前言&#xff1a;Python的统治力一、基础应用领域1. Web开发数据科学 二、前沿技术领域机器学习深度学习 三、行业解决方案量化金融生物信息 四、创新应用方向物联网开发区块链开发 五、效率工具生态自动化运维游戏开发 结语&#xff1a;Python的边界与突破技术局限未来演…

leetcode 2787. Ways to Express an Integer as Sum of Powers

题目描述 这道题是0-1背包问题。可以理解为&#xff0c;有一个最大容量是n的背包&#xff0c;有n个物品&#xff0c;第i个物品的重量是i^x&#xff0c;问装满背包有多少种装法。题目要求必须是互不相同的数的x次幂的和等于n&#xff0c;那就表示每个数只能用一次&#xff0c;也…

面试经验分享 | 成都渗透测试工程师二面面经分享

可以看看我的置顶文章和专栏找我哦 概况 面试过程 面试官的问题 问题1、你觉得当前OAuth2.0下的攻击手段有哪些&#xff1f;结合具体案例详细讲讲 问题2、php/java反序列化漏洞的原理?程序员/运维如何避免此类漏洞或如何防御? 问题3、如果一台服务器被入侵后,你会如何做应急…

模仿axios的封装效果来封装fetch,实现baseurl超时等

因为要在cocos游戏项目里面发送网络请求获取数据&#xff0c;并且还有可能用到websocket发送请求&#xff0c;所以这里封装一个fetch放便使用&#xff1a; // fetch封装// 基础配置 const BASE_URL 你的url const TIMEOUT 5000// 请求封装 const http async (url: string, …

小米运维面试题及参考答案(80道面试题)

请讲解一下 linux top 后进程的状态 在 Linux 系统中,使用top命令可以查看系统中正在运行的进程的相关信息,进程通常有以下几种状态: 运行(R):表示进程正在 CPU 上运行或者正在运行队列中等待运行。处于运行状态的进程正在积极地使用 CPU 资源来执行其任务。睡眠(S):进…

a sort.py demo

这份代码展示了如何使用 sort.py。注意&#xff0c;此处&#xff0c;我将文件名改为 my_sort.py。 你并不能直接 copy 使用&#xff0c;因为环境&#xff0c;包&#xff0c;还有模型。 此处使用 SSD-MobileNetv2 进行物体检测&#xff0c;将结果传入以 np 数组的形式传入sort…

使用Redis解决:集群的Session共享问题

使用Redis解决&#xff1a;集群的Session共享问题 session共享问题&#xff1a;多台Tomcat并不共享session存储空间&#xff0c;当请求切换到不同的tomcat服务时导致数据丢失的问题。 问题背景 ​无状态HTTP协议&#xff1a;HTTP协议本身是无状态的&#xff0c;服务器无法直接识…

Linux 内核知识体系[1]

1 Linux内核知识体系 2.Linux内核学习路线 2.1基础知识准备 操作系统基础&#xff1a;了解操作系统的概念和基本原理&#xff0c;包括进程管理、内存管理、文件系统、输入输出等。 书籍&#xff1a;《操作系统&#xff1a;设计与实现》&#xff08;Andrew S. Tanenbaum&…

KiActivateWaiterQueue函数和Queue->Header.WaitListHead队列等待列表的关系

第一部分&#xff1a; if (Thread->ApcState.KernelApcPending && (Thread->SpecialApcDisable 0) && (Thread->WaitIrql < APC_LEVEL)) { } else { // // Insert wait block in ob…

让DeepSeek API支持联网搜索

引子 DeepSeek官网注册的API token是不支持联网搜索的&#xff0c;这导致它无法辅助分析一些最新的情况或是帮忙查一下互联网上的资料。本文从实战角度提供一种稳定可靠的方法使得DeepSeek R1支持联网搜索分析。 正文 首先登录火山方舟控制台&#xff0c;https://www.volcen…

生物信息Rust-01

前言-为什么想学Rust&#xff1f; 一直想多学一门编译语言&#xff0c;主要有几个原因吧&#xff08;1. 看到一位老师实验室要求需要掌握一门编译语言&#xff1b;2. 自己享想试着开发一些实用的生信工具&#xff0c;感觉自己现在相比于数据分析&#xff0c;探索生物学层面的意…