第十六屆藍橋杯省賽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.pswp.cn/pingmian/76485.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76485.shtml
英文地址,請注明出處:http://en.pswp.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;探索生物學層面的意…