[第十六屆藍橋杯 JavaB 組] 真題 + 經驗分享

A:逃離高塔(AC)

這題就是簡單的簽到題,按照題意枚舉即可。需要注意的是不要忘記用long用int的話會

📖 代碼示例

import java.io.*;
import java.util.*;
public class Main {public static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException{long sum = 0;for(long i = 1;i <= 2025;i++){long num = i * i * i;if(num % 10 == 3){sum++;}}System.out.println(sum);}
}
//快讀模板不必在意
class Read{StringTokenizer st = new StringTokenizer("");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException{while(!st.hasMoreTokens()){st = new StringTokenizer(br.readLine());}return st.nextToken();}int nextInt() throws IOException{return Integer.parseInt(next());}long nextLong() throws IOException{return Long.parseLong(next());}double nextDouble() throws IOException{return Double.parseDouble(next());}
}

📕 答案:202

B:消失的藍寶(AC)

這題最開始嘗試用暴力枚舉,但后來跑了好長時間,又擴大了好多次范圍,還是沒能出結果,硬想了半天,覺得應該和最小公倍數有關

要知道,要找到一個最小數,使得同時能被 a 和 b 整除,那么這個數就是 a 和?b 的最小公倍數。

題目中要求找到一個 n,滿足(n + a) % b == 0 && (n + b) % a == 0,那么只要我們找到 a 和 b 的最小公倍數 c,此時c滿足 c % a == c % b == 0。

那么 因為 c % a == 0 可以知道 (c - a) % a == 0。
同理 因為 c % b == 0 可以知道 (c - b) % b == 0。

假設現在我們有一個 n 滿足?(n + a) % b == 0 那么 (n + a) = (c - b)
同理 (n + b) % a == 0 那么 (n + b) = (c - a)

最終得到 n = c - a - b

📖 代碼示例

import java.io.*;
import java.util.*;
public class Main {public static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException{long a = 20250412;long b = 20240413;System.out.println((a * b / gcd(a,b)) - a - b);}public static long gcd(long a,long b){return b == 0 ? a : gcd(b,a % b);}
}
class Read{StringTokenizer st = new StringTokenizer("");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException{while(!st.hasMoreTokens()){st = new StringTokenizer(br.readLine());}return st.nextToken();}int nextInt() throws IOException{return Integer.parseInt(next());}long nextLong() throws IOException{return Long.parseLong(next());}double nextDouble() throws IOException{return Double.parseDouble(next());}
}

📕 答案:409876661809331

C:電池分組(AC)

該題考察的是對異或操作符的理解,題中的要求是給定一個數組,讓我們判斷,這個數組是否能夠分成兩部分,使得"兩部分的異或和相等"。

異或操作符:兩個數字,二進制位相同為0,否則為1。

我們得清楚,不管如何劃分數組,整個數組的"異或和"都是不變的,而如果數組能夠分成"兩個異或和相等的部分",也就意味著,最后再將這兩部分的異或和進行異或,結果必然是等于0的。(數字相等,所有二進制位相同)

那么這兩部分異或和的異或,所得到的結果,代表什么呢?沒錯,代表整個數組的異或和。

那么也就是說:如果能找到這樣的兩部分,則代表整個數組的異或和一定為0。

反過來想,如果一個數組的異或和為0,是否就能代表一定存在這樣的兩部分呢?

是一定的。因為如果一個數組異或和為0,則代表最后的一步異或和,一定會是"兩部分數組的異或和"進行異或,并且"這兩部分的異或和一定相等",否則就違背了"整個數組異或和為0"的前提了。

所以:如果整個數組異或和為0,則輸出"YES",否則,輸出"NO"。

📖 代碼示例

import java.io.*;
import java.util.*;public class Main {public static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException {int t = in.nextInt();while(t-- > 0){int n = in.nextInt();int[] arr = new int[n];for(int i = 0;i < n;i++){arr[i] = in.nextInt();}long sum = arr[0];for(int i = 1;i < n;i++){sum = arr[i] ^ sum;}System.out.println(sum == 0 ? "YES" : "NO");}}
}
class Read{StringTokenizer st = new StringTokenizer("");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException{while(!st.hasMoreTokens()){st = new StringTokenizer(br.readLine());}return st.nextToken();}int nextInt() throws IOException{return Integer.parseInt(next());}long nextLong() throws IOException{return Long.parseLong(next());}double nextDouble() throws IOException{return Double.parseDouble(next());}
}

D:魔法科考試(AC)

該題考察的是"素數篩法",這邊我采用的是最常用的"埃氏篩",這題的數據范圍是:

所以說我們只需要篩到大于40000的范圍就好了,當然,即使這個范圍不大,不使用優化篩法的話肯定也還是會超時的。因為使用雙重for循環去檢查所有魔法組合就已經有O(n^2)了~

注意:1 + 6 和 3 + 4 和 4 + 3,這種結果相同的"魔法口訣",算是同一個,不能重復計數,所以應該去重。

📖 代碼示例

import java.io.*;
import java.util.*;public class Main {public static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static int[] zhi = new int[50100];public static boolean[] check = new boolean[50100];public static HashSet<Integer> set = new HashSet<>();public static void main(String[] args) throws IOException {shai();int a = in.nextInt();int b = in.nextInt();int[] arr1 = new int[a + 1];int[] arr2 = new int[b + 1];for(int i = 0;i < a;i++){arr1[i] = in.nextInt();}for(int i = 0;i < b;i++){arr2[i] = in.nextInt();}int max = 0;for(int i = 0;i < a;i++){for(int j = 0;j < b;j++){int num = arr1[i] + arr2[j];if(num <= a + b && zhi[num] == 1){if(!set.contains(num)){set.add(num);max++;}}}}System.out.println(max);}public static void shai(){for(int i = 2;i < 50049;i++){//未被篩出if(!check[i]){//標記為質數zhi[i] = 1;//將i的倍數都篩出for(int j = i;j < 50049;j += i){check[j] = true;}}}}
}
class Read{StringTokenizer st = new StringTokenizer("");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException{while(!st.hasMoreTokens()){st = new StringTokenizer(br.readLine());}return st.nextToken();}int nextInt() throws IOException{return Integer.parseInt(next());}long nextLong() throws IOException{return Long.parseLong(next());}double nextDouble() throws IOException{return Double.parseDouble(next());}
}

E:爆破

這題考察的應該是最小生成樹...俺不會,寫的dijkstra,運氣好的話希望能騙個一兩分吧...

F:數組翻轉(AC)

數據范圍

我們先考慮暴力解法

其實就是將所有可能的翻轉都嘗試一遍,這樣就能找到所有的情況,并且找出最大的。

但翻轉這個操作本身就是O(n)的,再加上嘗試所有范圍翻轉,就達到了O(n^3),這是非常可怕的

(即使如此也能暴力掉20%,也就是3分,接近一道填空題的分數了~)

但實際上,我們并不需要進行"翻轉"這個操作,因為:

翻轉數組的目的是:得到可通過拼接得到的最長目標值。
而我們再想一下,如何能知道"可拼接得到的最長目標值串"呢?其實,就是找到整個數組中,"等于目標值的最長子串""等于目標值的第二長子串"進行拼接即可。

如何證明?其實很好想,不管如何選取范圍翻轉,我們都沒法改變范圍內數組的本質順序,也就是說,我們只能"選取部分進行拼接",而每次拼接,肯定只能選到兩個子串拼接,如果想選三個,那么勢必會有兩個子串中有間隔。

所以,我們只需要找到"每個值對應數組中的第一長與第二長子串",將長度相加后,進行求分數即可,最后找到"子串拼接后分數最高的值",輸出即可。

import java.util.*;
import java.io.*;public class Main {public static PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException{int n = in.nextInt();int[] arr = new int[n + 1];HashSet<Integer> set = new HashSet<>();for(int i = 1;i <= n;i++){arr[i] = in.nextInt();set.add(arr[i]);}arr[0] = Integer.MAX_VALUE;HashMap<Integer,Integer> map1 = new HashMap<>();HashMap<Integer,int[]> map2 = new HashMap<>();int l = 1;int r = 1;while(r <= n){int len = map1.getOrDefault(arr[l],0);int newlen = 0;while(r <= n && arr[l] == arr[r]){newlen++;r++;}if(len < newlen){len = newlen;map1.put(arr[l],len);map2.put(arr[l],new int[]{l,r});}l = r;}HashMap<Integer,Integer> map3 = new HashMap<>();l = r = 1;//再次進行查找數組中的[第二長子串],跳過第一長子串即可while(r <= n){//為val = arr[l]的最長字串if(map2.get(arr[l])[0] == l){l = map2.get(arr[l])[1];r = l;continue;}int len = map3.getOrDefault(arr[l],0);int newlen = 0;while(r <= n && arr[l] == arr[r]){newlen++;r++;}if(len < newlen){len = newlen;map3.put(arr[l],len);}l = r;}long max = 0;for(int a:set){//有可能不存在第二長子串int len = map1.get(a) + map3.getOrDefault(a,0);long num = len * 1l * a;max = Math.max(max,num);}System.out.println(max);}
}
class Read{StringTokenizer st = new StringTokenizer("");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException{while(!st.hasMoreTokens()) {st = new StringTokenizer(br.readLine());}return st.nextToken();}String nextLine() throws IOException{return br.readLine();}int nextInt() throws IOException{return Integer.parseInt(next());}long nextLong() throws IOException{return Long.parseLong(next());}double nextDouble() throws IOException{return Double.parseDouble(next());}
}

G:2的冪

這題不會...but!

所以我寫的時候,先判斷原數組是不是已經滿足條件了,如果滿足直接輸出0,不滿足直接輸出-1...不知道能不能騙到分。

H:研發資源分配

范圍:

不會...只會用全排列暴力騙分。


總的來說,感覺今年藍橋杯的數學和貪心含量太高了...考前學了一堆算法,dijkstra,floyd,并查集,最近公共祖先...一個都沒出呀,這就算了...二分,bfs,dfs都沒出。有種學了半年砌磚,最后考我電焊的感覺.難受

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901529.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GPU服務器聲音很響可以怎么處理

當GPU服務器運行時噪音過大&#xff0c;通常是由于高負載下散熱風扇高速運轉所致。以下是分步驟的解決方案&#xff0c;幫助您有效降低噪音并保持設備穩定運行&#xff1a; 一、排查噪音來源 定位聲源 ? 使用 聲級計 或手機分貝檢測APP&#xff0c;確定最大噪音位置&#xff0…

STM32平衡車開發實戰教程:從零基礎到項目精通

STM32平衡車開發實戰教程&#xff1a;從零基礎到項目精通 一、項目概述與基本原理 1.1 平衡車工作原理 平衡車是一種基于倒立擺原理的兩輪自平衡小車&#xff0c;其核心控制原理類似于人類保持平衡的過程。當人站立不穩時&#xff0c;會通過腿部肌肉的快速調整來維持平衡。平…

C#設計模式-狀態模式

狀態模式案例解析&#xff1a;三態循環燈的實現 案例概述 本案例使用 狀態模式&#xff08;State Pattern&#xff09; 實現了一個 三態循環燈 的功能。每點擊一次按鈕&#xff0c;燈的狀態會按順序切換&#xff08;狀態1 → 狀態2 → 狀態3 → 狀態1...&#xff09;&#xff…

Mac系統升級node.js版本和npm版本并安裝pnpm

1.升級node.js版本 第一步&#xff1a;查詢當前node.js版本 node -v第二步&#xff1a;清除node.js的緩存 sudo npm cache clean -f第三步&#xff1a;驗證緩存是否清空 npm cache verify第四步&#xff1a;安裝n工具&#xff0c;n工具是專門用于管理node.js版本的工具 su…

[net 5] udp_dict_server 基于udp的簡單字典翻譯(服務器與業務相分離)

目錄 1. 功能了解 1.1. 啥是 dic_server? 1.2. dic_server 的小目標 2. 基本框架 2.1. 基本文件框架 2.2. 業務與服務器解耦 -> 回調函數 3. 字典 3.1. 字典配置文件 3.2. 構建字典類 3.2.1. 字典類的基本成員 3.2.2. 字典類構造 3.2.2.1. 構造 3.2.2.2. 信息加…

七種驅動器綜合對比——《器件手冊--驅動器》

九、驅動器 名稱 功能與作用 工作原理 優勢 應用 隔離式柵極驅動器 隔離式柵極驅動器用于控制功率晶體管&#xff08;如MOSFET、IGBT、SiC或GaN等&#xff09;的開關&#xff0c;其核心功能是將控制信號從低壓側傳輸到高壓側的功率器件柵極&#xff0c;同時在輸入和輸出之…

EM儲能網關ZWS智慧儲能云應用(8) — 電站差異化支持

面對不同項目、種類繁多的儲能產品&#xff0c;如何在儲能云平臺上進行電站差異化支持尤為關鍵&#xff0c;ZWS智慧儲能云從多方面支持儲能電站差異化。 簡介 隨著行業發展&#xff0c;市場“內卷”之下&#xff0c;各大儲能企業推陳出新的速度加快。面對不同項目、種類繁多…

圖像預處理-色彩空間補充,灰度化與二值化

一.圖像色彩空間轉換 1.1 HSV顏色空間 HSV顏色空間使用色調&#xff08;Hue&#xff09;、飽和度&#xff08;Saturation&#xff09;和亮度&#xff08;Value&#xff09;三個參數來表示顏色 一般對顏色空間的圖像進行有效處理都是在HSV空間進行的&#xff0c;然后對于基本…

Midnight Flag CTF 2025

周末還是三個比賽&#xff0c;可惜不好弄。不是遠端連不上就是遠端打不開。再有就是太難了。 Crypto ABC 這個題還是不算難的。給了兩個30位數的平方和&#xff0c;并且pu1*baser0,qu2*baser1其中r 都很小&#xff0c;可以copper。 只是sage里的two_squres不管用&#xff0…

深度學習--激活函數

激活函數通過計算加權和并加上偏置來確定神經元是否應該倍激活&#xff0c;它們將輸入信號轉換為輸出的可微運算。大多數激活函數都是非線性的&#xff0c;由于激活函數是深度學習的基礎&#xff0c;下面簡要介紹一些常見的激活函數。 1 RelU函數 最受歡迎的激活函數是修正線性…

深入解析 OrdinalEncoder 與 OneHotEncoder:核心區別與實戰應用

標題&#xff1a;深入解析 OrdinalEncoder 與 OneHotEncoder&#xff1a;核心區別與實戰應用 摘要&#xff1a; 本文詳細探討了機器學習中類別特征編碼的兩種核心方法——OrdinalEncoder 和 OneHotEncoder。通過對比兩者的功能、特點、適用場景及代碼實現&#xff0c;幫助讀者…

CTF web入門之命令執行 完整版

web29 文件名過濾 由于flag被過濾,需要進行文件名繞過,有以下幾種方法: 1.通配符繞過 fla?.* 2.反斜杠繞過 fl\ag.php 3.雙引號繞過 fl’‘ag’.php 還有特殊變量$1、內聯執行等 此外 讀取文件利用cat函數,輸出利用system、passthru 、echo echo `nl flag.php`; ec…

【Linux實踐系列】:用c/c++制作一個簡易的進程池

&#x1f525; 本文專欄&#xff1a;Linux Linux實踐項目 &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 人生沒有標準答案&#xff0c;你的錯題本也能寫成傳奇。 ★★★ 本文前置知識&#xff1a; 匿名管道 1.前置知識回顧…

2.2 函數返回值

1.回顧def def sum(x,y): return xy res sum(10,20) #調用函數 print(res) 2.函數的三個重要屬性 -函數的類型&#xff1a;function -函數的ID&#xff1a;16進制的整數數值 -函數的值&#xff1a;封裝在函數中的數據和代碼 # - 函數是一塊內存空間&#xff0c;通過…

【3GPP核心網】【5G】精講5G網絡語音業務系統架構

1. 歡迎大家訂閱和關注,精講3GPP通信協議(2G/3G/4G/5G/IMS)知識點,專欄會持續更新中.....敬請期待! 目錄 1. 音視頻業務 2. 消息類業務 SMS over IMS SMS over NAS 3. 互聯互通架構 3.1 音視頻業務互通場景 3.2 5G 用戶與 5G 用戶互通 3.3 5G 用戶與 4G 用戶的互通…

系統環境變量有什么實際作用,為什么要配置它

系統環境變量有什么實際作用,為什么要配置它 系統環境變量具有以下重要實際作用: 指定程序路徑:操作系統通過環境變量來知曉可執行文件、庫文件等的存儲位置例如,當你在命令提示符或終端中輸入一個命令時,系統會根據環境變量PATH中指定的路徑去查找對應的可執行文件。如果…

qt/C++面試題自用學習(更新中)

最近在找工作…面試中遇到了的問題總以為自己會但回答的時候磕磕巴巴&#xff0c;覺得還是要總結一下&#xff1a; vector和list的區別 vector list 底層數據結構 基于動態數組實現&#xff0c;元素在內存中連續存儲 基于雙向鏈表實現&#xff0c;元素在內存中非連續存儲&…

Day09【基于Tripletloss實現的簡單意圖識別對話系統】

基于Tripletloss實現的表示型文本匹配 目標數據準備參數配置數據處理Triplet Loss目標Triplet Loss計算公式公式說明 模型構建網絡結構設計網絡訓練目標損失函數設計 主程序推理預測類初始化加載問答知識庫文本向量化知識庫查詢主程序main測試測試效果 參考博客 目標 在此之前…

說說什么是冪等性?

大家好&#xff0c;我是鋒哥。今天分享關于【說說什么是冪等性&#xff1f;】面試題。希望對大家有幫助&#xff1b; 說說什么是冪等性&#xff1f; 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 冪等性&#xff08;Idempotence&#xff09; 是指在某些操作或請求…

【自相關】全局 Moran’s I 指數

自相關&#xff08;Autocorrelation&#xff09;&#xff0c;也稱為序列相關性&#xff0c;指的是同一變量在不同時間或空間點的值之間的關系。簡而言之&#xff0c;自相關就是一個變量與自身在不同位置或時間點的相關性 自相關&#xff1a;針對同一屬性之間進行分析相關性 本…