第十六屆藍橋杯復盤

文章目錄

    • 1.數位倍數
    • 2.IPv6
    • 3.變換數組
    • 4.最大數字
    • 5.小說
    • 6.01串
    • 7.甘蔗
    • 8.原料采購

省賽過去一段時間了,現在復盤下,省賽報完名后一直沒準備所以沒打算參賽,直到比賽前兩天才決定參加,賽前兩天匆匆忙忙下載安裝了比賽要用的編譯器eclipse,當時連編譯和運行怎么操作都不知道,平時用的都是idea,就簡單熟悉了下輸入輸出就去比賽了,比賽那天天還沒亮,早早出發就去賽點了,賽后也不知ac了多少,結果出來省一等獎進入國賽,這是第一次參加java賽道的,可以說完全沒準備,能進國賽靠的是大學打比賽時的基礎和運氣好,不過大學參加的是cpp組別的,編程語言不一樣,但算法思想感覺還是通用的,國賽不打算去參加了,這段時間日夜顛倒,打算出去玩幾天緩緩,先去爬個衡山。
在這里插入圖片描述

1.數位倍數

【問題描述】
?請問在 1 至 202504(含)中,有多少個數的各個數位之和是 5 的整數倍。例如:5、19、8025 都是這樣的數。
?
思路:統計每個數字的數位總和,判斷是否5的倍數進行累加。

代碼

import java.util.*;public class Main {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}public static void main(String[] args){int ans = 0;for (int i = 1; i <= 202504; i++) {int x = i;int cnt = 0;while (x != 0) {cnt += x % 10;x /= 10;}if (cnt % 5 == 0) {ans++;}}out.println(ans);out.flush();out.close();}
}

答案:40500

2.IPv6

【問題描述】
????小藍最近在學習網絡工程相關的知識。他最近學習到,IPv6 地址本質上是一個 128 位的二進制數,而字符串形式的 IPv6 地址是由被冒號分開的八段 16 進制數組成的,例如,下面每行是一個字符串形式的 IPv6 地址:

0000:0000:0000:0000:0000:0000:0000:0000
0000:0001:0000:0000:0000:0001:0000:0000
0000:0001:00ab:0000:0023:0000:0a00:0e00
0000:0000:00ab:0000:000a:0001:0a00:0e00
0000:0000:00ab:0000:0000:0001:0a00:0e00

其中,每一段最長 4 位,且每一段的前導零都可以去掉(如果 4 位都為 0 需要寫成 0)。
另外,IPv6 地址還可以將其中相鄰的值為 0 的段合并壓縮起來,用兩個冒號來表示,不過只能壓縮一段。
例如上述地址最短的壓縮后的形式分別為

::
0:1::1:0:0
0:1:ab:23:0:a00:e00
::ab:0:a:1:a00:e00
0:0:ab::1:a00:e00

小藍想知道,所有 IPv6 地址的最短壓縮形式的長度的和為多少?由于答案很大(甚至超過了 128 位二進制整數的范圍),請填寫答案時填寫這個總和除以10^9+7的余數。
????
思路: dfs+組合數學,先通過dfs 生成段長度組合,每個段的長度a[i]可取0-4,再計算每段的種類數15×16^(len-1)(15表示非 0 首字符數,16^(len-1)為后面字符數),IPv6碼總種類數等于所有段種類數的乘積,然后再計算IPV6碼壓縮后長度=不壓縮前長度-壓縮的0序列長度,最終將所有情況的長度進行累加。

代碼

import java.io.*;public class Main{private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}private static final int MOD = 1000000007;private static final int N = 8;private static int[] a = new int[N + 1];private static long[] fact = new long[5];private static long ans = 0;public static void main(String[] args) {// 初始化16的冪次數組fact[0] = 1;for (int i = 1; i < 5; i++) {fact[i] = fact[i - 1] * 16 % MOD;}dfs(1);System.out.println(ans);}//dfs生成所有可能的段長度組合private static void dfs(int x) {if (x == N + 1) {// 計算當前組合的總種類數和長度long sum = 1;for (int i = 1; i <= N; i++) {int len = a[i];if (len != 0) {// 計算當前段的種類數:(16-1) * 16^(len-1)sum = sum * fact[len - 1] % MOD;sum = sum * 15 % MOD;}}// 計算當前組合的長度int currentLength = getLength();sum = sum * currentLength % MOD;ans = (ans + sum) % MOD;return;}// 枚舉當前段的長度(0-4)for (int i = 0; i <= 4; i++) {a[x] = i;dfs(x + 1);}}//計算當前段組合壓縮后的IPv6碼長度private static int getLength() {int len = 0; for (int i = 1; i <= N; i++) {if (a[i] == 0) {len++; // 0段計為1個字符} else {len += a[i]; // 非0段計為實際長度}}len += 7; int maxCompress = 0;int left = -1; // 連續0段的左邊界for (int right = 1; right <= N; right++) {if (a[right] == 0) {if (left == -1) {left = right; }// 計算當前連續0段的可壓縮長度int currentCompress;if (right == N) { if (left == 1) { // 全0壓縮currentCompress = 2 * (right - left) - 1;} else {currentCompress = 2 * (right - left);}} else if (left == 1) {currentCompress = 2 * (right - left);} else { // 中間位置的連續0段currentCompress = 2 * (right - left) + 1;}maxCompress = Math.max(maxCompress, currentCompress);} else {left = -1; // 遇到非0段,重置左邊界}}return len - maxCompress; // 總長度減去最大壓縮長度}
}

答案:905307083

3.變換數組

【問題描述】
????輸入一個數組 a ,包含有 n 個元素 a1,a2,…,an。對這個數組進行 m 次變換,每次變換會將數組 a 中的每個元素 ai 轉換為 ai · bitCount(ai)。其中 bitCount(x) 表示數字 x 的二進制表示中 1 出現的次數,例如 bitCount(3)=2,因為 3 的二進制表示為 11,其中 1 出現了兩次。
????請輸出變換之后的數組內容。
【輸入格式】
????輸入的第一行包含一個正整數 n ,表示數組 a 中的元素個數。
????第二行包含 n 個整數 a1,a2,…,an,相鄰整數之間使用一個空格分隔。
????第三行包含一個整數 m,表示變換次數。
【輸出格式】
????輸出一行,包含 n 個整數,相鄰整數之間使用一個空格分隔,表示變換之后得到的數組 a。
【樣例輸入】

2
5 7
2

【樣例輸出】

20 63

思路:計算每個元素對應二進制中1的個數,進行相乘即可。

代碼

import java.io.*;
import java.util.*;public class Main {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}static final int N = 1010;static int n, m;static int[] a = new int[N];// 計算數字二進制中1的個數static int count(int x) {int cnt = 0;while (x != 0) {cnt += x % 2;x /= 2;}return cnt;}public static void main(String[] args) {n = Int();for (int i = 1; i <= n; i++) {a[i] = Int();}m = Int();while (m-- > 0) {for (int i = 1; i <= n; i++) {a[i] *= count(a[i]);}}for (int i = 1; i <= n; i++) {out.print(a[i] + " ");}out.flush();out.close();}
}

4.最大數字

【問題描述】
我們有 n 個連續的整數 1,2,3,…,n,可以自由排列它們的順序。
然后,我們把這些數字轉換成二進制表示,按照排列順序拼接形成一個新的二進制數。
我們的目標是讓這個二進制數的值最大,并輸出這個二進制對應的十進制表示。
【輸入格式】
????輸入一行包含一個正整數 n 。
【輸出格式】
????輸出一行包含一個整數表示答案。
【樣例輸入】

3

【樣例輸出】

30

【樣例說明】
1 的二進制為 1;2 的二進制為 10;3 的二進制為 11;其組成的最大的二進制數字為 11110,對應的十進制數字為 30。

思路:自定義排序+大數運算,將1 ? n 所有數的二進制放入集合后進行排序,然后對排序后的二進制字符串從后往前進行運算轉換成10進制。

代碼

import java.io.*;
import java.math.BigInteger;
import java.util.*;public class Main {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}public static void main(String[] args) {int n = Int();List<String> list = new ArrayList<>();for (int i = 1; i <= n; ++i) {list.add(itos(i));}Collections.sort(list,new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return (o1 + o2).compareTo(o2 + o1) > 0 ? 1 : -1;}});StringBuilder sb = new StringBuilder();for (int i = list.size() - 1; i >= 0; --i) {sb.append(list.get(i));}BigInteger sum = new BigInteger("0");BigInteger d = new BigInteger("1");int len = sb.length();for (int i = len - 1; i >= 0; --i) {if (sb.charAt(i) == '1') {sum = sum.add(d);}d = d.multiply(new BigInteger("2"));}out.println(sum);out.flush();out.close();}public static String itos(int n) {StringBuilder sb = new StringBuilder();while (n != 0) {sb.append(n % 2);n /= 2;}return sb.reverse().toString();}
}

5.小說

【問題描述】

小藍是一位網絡小說家。現在他正在撰寫一部新的推理小說,這部小說有 n 個不同的人物。

小說的每一章都有以下三種情節的一種:

A 發現 B 不知道真相。
A 發現 B 知道真相。
A 知道了真相。

為了保證讀者的協調和新鮮感,小藍的小說還要滿足以下要求:

B 發現 A 不知道真相”不能在 “A 知道了真相”后。
“B 發現 A 知道真相”不能在 “A 知道了真相”前。
“B 發現 A 不知道真相”不能在 “B 發現 A 知道真相”后。
相鄰的兩章情節類型不同,例如如果第一章是 A 發現 B 不知道真相那么第二章就不能是 C 發現 D 不知道真相。
完全相同的情節不能出現兩次。

現在小藍希望知道,他最多能寫多少章。
輸入的第一行包含一個正整數 n,表示小說人數。
輸入

2

輸出

6

思路:對于 n 個角色,當 n=1 時,最多可寫章節數為為 1;當 n≥2 時,答案為2n^2?3n+4.

分為以下幾種情況:
相鄰角色:假設角色甲剛知真相,下一個知真相的是角色乙
情況1:除乙外的n?1個角色發現乙不知道真相(共n?1次)
情況2:除甲外的n?1個角色發現甲知道真相(共n?1次)
每對相鄰角色有2(n?1)種可能,共n?1對相鄰角色,總共有2(n?1)2個情節。
知真相的情況:
情況3:每個角色知道真相對應1個情節,共n個情節
邊界處理:
情況4
第一個角色知真相前:只能有情況1
最后一個角色知真相后:只能有情況2,所以邊界總共2個情節,最終2n^2?3n+4

代碼

import java.io.*;
import java.util.*;public class Test2 {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}public static void main(String[] args) {long n= Lon();if(n==1){out.println(1);}else{out.println(2*n*n-3*n+4);}out.flush();out.close();}
}

6.01串

【問題描述】
????給定一個由 0,1,2,3…的二進制表示拼接而成的長度無限的 01 串。其前若干位形如 011011100101110111… 。請求出這個串的前 x 位里有多少個 1 。
【輸入格式】
????輸入的第一行包含一個正整數 x 。
【輸出格式】
????輸出一行包含一個整數表示答案。
【樣例輸入】

7

【樣例輸出】

5

思路:分段統計+位運算,將自然數(0,1,2,3,…)的二進制拼接而成的01 串分為兩段處理,分別是前面的完整段和后面的不完整段,先計算有多少個完整的自然數段被完全包含在前x位中,再處理剩余部分,對最后一個不完整的自然數段,統計其中前mod位內的1的個數。

代碼

import java.io.*;
import java.util.*;public class Test2 {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}public static void main(String[] args) {long x = Lon();x--;long res = 0;long i;for (i = 0; ; i++) {long term = (i + 1) * (1L << i);if (x < term) break;x -= term;res += (1L << i);}res += x / (i + 1);long mod = x % (i + 1);long sumResult = getSum(res);long popResult = popCount(res + 1 >> (int) (Math.log(res + 1) / Math.log(2)) - (int) mod + 1);out.println(sumResult + popResult);out.flush();out.close();}//計算二進制中1的個數private static long popCount(long x) {long res = 0;while (x != 0) {res += x & 1;x >>>= 1;}return res;}// 計算所有自然數二進制中1的總個數private static long getSum(long x) {long res = 0;long cnt = 0;x++; // 轉換為閉區間[1, x]while (x != 0) {if ((x & 1) != 0) {// 計算當前位為1時的貢獻res += (cnt * (1L << (cnt - 1))) + ((1L << cnt) * popCount(x >> 1));}x >>>= 1;cnt++;}return res;}
}

7.甘蔗

【問題描述】
????小藍種了一排甘蔗,甘蔗共 n 根,第 i 根甘蔗的高度為 ai 。小藍想砍一些甘蔗下來品嘗,但是他有強迫癥,不希望甘蔗的高度顯得亂糟糟的。具體來說,他給出了一個大小為 m 的整數集合 B = {b1,b2,…,bm} ,他希望在砍完甘蔗后,任意兩根相鄰的甘蔗之間的高度差 |ai - ai+1| 都要在這個集合 B 中。小藍想知道他最少需要砍多少根甘蔗(對于高度為 h 的甘蔗,他可以將其砍成 x 高度的甘蔗,x ∈{0,1,2,…,h - 1})。
【輸入格式】
????輸入的第一行包含兩個正整數 n,m,用一個空格分隔。
????第二行包含 n 個正整數 a1,a2,…,an ,相鄰整數之間使用一個空格分隔。
????第三行包含 m 個正整數 b1,b2,…,bm ,相鄰整數之間使用一個空格分隔。
【輸出格式】
????輸出一行包含一個整數表示答案。如果不能滿足條件,輸出 -1 。
【樣例輸入】

6 3
6 7 3 4 9 12
2 3 5

【樣例輸出】

2

【樣例說明】

其中一種方案:將 a2 砍為 3,再將 a3 砍為 1。

思路:動態規劃,先確定dp表達式, dp[i][j]表示第i根甘蔗在高度為 j時,符合條件時最少需要砍多少根甘蔗,然后確定狀態轉移方程式,對于每根甘蔗的高度 j 是由前一根甘蔗的 j-b[k] 和 j+b[k] 轉移過來,但需要注意這兩個狀態的高度必須在前一根甘蔗的高度范圍內,然后進行初始化,當第一根甘蔗高度為a[1]時dp[1][a[1]] = 0,高度為i (i<a[1])時 dp[1][i] = 1,其余初始化為無窮大。

代碼

import java.io.*;
import java.util.*;public class Test2 {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}public static void main(String[] args) {int n =Int();int m =Int();int[] a = new int[n + 1];int[] b = new int[m + 1];for (int i = 1; i <= n; i++) {a[i] = Int();}for (int i = 1; i <= m; i++) {b[i] = Int();}int[][] dp = new int[n + 1][1001];for(int i = 0;i <= n; ++i){for(int j = 0; j <= 1000; ++j){dp[i][j] = Integer.MAX_VALUE/2;}}dp[1][a[1]] = 0;for (int i = 0; i < a[1]; ++i) {dp[1][i] = 1;}for (int i = 2; i <= n; ++i) {for (int j = 0; j <= a[i]; ++j) {for (int k = 1; k <= m; ++k) {if (j == a[i]) {if (j - b[k] >= 0) dp[i][j] = Math.min(dp[i - 1][j - b[k]], dp[i][j]);if (j + b[k] <= a[i - 1]) dp[i][j] = Math.min(dp[i - 1][j + b[k]], dp[i][j]);} else {if (j - b[k] >= 0) dp[i][j] = Math.min(dp[i - 1][j - b[k]]+1, dp[i][j]);if (j + b[k] <= a[i - 1]) dp[i][j] = Math.min(dp[i - 1][j + b[k]] + 1, dp[i][j]);}}}}int res = dp[n][0];for (int i = 1; i <= a[n]; ++i) {res = Math.min(res, dp[n][i]);}out.println(res == Integer.MAX_VALUE/2 ? -1 : res);out.flush();out.close();}
}

8.原料采購

小藍負責一家工廠的原料采購。

工廠有一輛運貨卡車,其容量為 m。

工廠附近的采購點都在同一條路的同一方向上,一共有 n 個,每個采購點和工廠的距離各不相同。其中,第 i 個采購點的價格為 ai?, 庫存為 bi?, 距離為 ci?。

卡車每行駛一單位長度的路徑就需要額外花費 o。(返程沒有花費,你也可以認為 o 實際是行駛兩單位長度的花費)

請計算將卡車裝滿最少需要花費多少錢,如果沒有任何方案可以裝滿請輸出 ?1。
輸入格式

輸入的第一行包含三個正整數 n,m,o,相鄰整數之間使用一個空格分隔。

接下來 n 行,每行包含三個正整數 ai?,bi?,ci? 表示一個采購點,相鄰整數之間使用一個空格分隔。
輸出格式

輸出一行包含一個整數表示答案,即裝滿卡車所需的最小花費。
輸入輸出樣例

輸入

3 5 1
99 9 1
3 4 99
1 2 190

輸出

201

思路:貪心+優先隊列,使用最大堆將采購點的原料按價格從高到低排序,先從前到后遍歷原料裝入卡車,當卡車裝滿后,將遍歷到原料的價格與最大堆中堆頂原料的最高價格進行比較,若當前價格低于堆頂原料,則替換堆頂原料,更新總費用,并記錄以當前點為最遠距離的總費用。

代碼

import java.io.*;
import java.util.*;public class Main {private static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));private static int Int() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}private static Long Lon() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}private static Double Dou() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return st.nval;}private static String Line() {String s = "";try {s = br.readLine();} catch (IOException e) {throw new RuntimeException(e);}return s;}static final int MAXN = 1000005;static final long INF = (long) 3e18;static int n, m, o;static long[] a = new long[MAXN];static long[] b = new long[MAXN];static long[] c = new long[MAXN];static long cost, use, sum;static long ans = INF;static class Node implements Comparable<Node> {long price;long wei;public Node(long price, long wei) {this.price = price;this.wei = wei;}@Overridepublic int compareTo(Node x) {return Long.compare(x.price, this.price); // 大頂堆}}public static void main(String[] args) {n = Int();m = Int();o = Int();for (int i = 1; i <= n; i++) {a[i] = Lon();b[i] = Lon();c[i] = Lon();use += b[i];}if (use < m) {out.println(-1);return;}PriorityQueue<Node> q = new PriorityQueue<>();for (int i = 1; i <= n; i++) {if (cost + b[i] <= m) {q.offer(new Node(a[i], b[i]));cost += b[i];sum += (a[i] * b[i]);} else {if (cost < m) {long delta = m - cost;q.offer(new Node(a[i], delta));b[i] -= delta;sum += a[i] * delta;cost = m;}while (!q.isEmpty() && b[i] > 0) {Node u = q.poll();if (u.price <= a[i]) {q.offer(u);break;}if (b[i] >= u.wei) {q.offer(new Node(a[i], u.wei));b[i] -= u.wei;sum -= (u.price - a[i]) * u.wei;} else {q.offer(new Node(a[i], b[i]));q.offer(new Node(u.price, u.wei - b[i]));sum -= (u.price - a[i]) * b[i];b[i] = 0;}}ans = Math.min(ans, sum + c[i] * o);}}out.println(ans);out.flush();out.close();}
}

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

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

相關文章

Manus AI 突破多語言手寫識別技術壁壘:創新架構、算法與應用解析

在人工智能領域&#xff0c;手寫識別技術作為連接人類自然書寫與數字世界的橋梁&#xff0c;一直備受關注。然而&#xff0c;多語言手寫識別面臨諸多技術挑戰&#xff0c;如語言多樣性、書寫風格差異、數據稀缺性等。Manus AI 作為該領域的領軍者&#xff0c;通過一系列創新技術…

25考研經驗貼(11408)

聲明&#xff1a;以下內容都僅代表個人觀點 數學一&#xff08;130&#xff09; 25考研數學一難度介紹&#xff1a;今年數學一整體不難&#xff0c;尤其是選填部分&#xff0c;大題的二型線面和概率論大題個人感覺比較奇怪&#xff0c;其他大題還是比較容易的。.26如何準備&a…

嵌入式軟件--stm32 DAY 6 USART串口通訊(下)

1.寄存器輪詢_收發字符串 通過寄存器輪詢方式實現了收發單個字節之后&#xff0c;我們趁熱打鐵&#xff0c;爭上游&#xff0c;進階到字符串。字符串就是多個字符。很明顯可以循環收發單個字節實現。 然后就是接收字符串。如果接受單個字符的函數放在while里&#xff0c;它也可…

QT使用QXlsx讀取excel表格中的圖片

前言 讀取excel表格中的圖片的需求比較小眾&#xff0c;QXlsx可以操作excel文檔&#xff0c;進行圖片讀取、插入操作&#xff0c;本文主要分享單獨提取圖片和遍歷表格提取文字和圖片。 源碼下載 github 開發環境準備 把下載的代碼中的QXlsx目錄&#xff0c;整個拷貝到所創建…

抽獎相關功能測試思路

1. 抽獎系統功能測試用例設計&#xff08;登錄 每日3次 中獎40% 道具兌換碼&#xff09; ? 功能點分析 必須登錄后才能抽獎每天最多抽獎3次抽獎有 40% 概率中獎中獎返回兌換碼 ? 測試用例設計 編號 用例描述 前置條件 操作 預期結果 TC01 未登錄時抽獎 未登錄 …

Unity editor文件數UI(支持勾選框)

unity editor文件數&#xff08;支持勾選框&#xff09; 使用的時候new一個box即可 using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;[Serializable] publ…

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例 0.RabbitMQ官網通信模式1.Simplest(簡單)模式1.1 發送端1.2 接收端 0.RabbitMQ官網通信模式 1.Simplest(簡單)模式 1.1 發送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple簡單模…

隨筆20250519 Async+ThreadPoolTaskExecutor?定義線程池進階實戰

1.ThreadPoolTaskExecutor線程池 有哪?個重要參數&#xff0c; 什么時候會創建線程 1.核心綫程數 查看核心綫程數目是否已經滿&#xff0c;未滿 創建一條綫程 執行任務&#xff0c;已滿負責執行第二部 2.阻塞隊列 查看阻塞隊列是否已經滿&#xff0c;未滿將任務加入阻塞隊列&…

YOLO11解決方案之實例分割與跟蹤探索

概述 Ultralytics提供了一系列的解決方案,利用YOLO11解決現實世界的問題,包括物體計數、模糊處理、熱力圖、安防系統、速度估計、物體追蹤等多個方面的應用。 實例分割是一項計算機視覺任務,涉及在像素級別識別和勾勒圖像中的單個對象。與只按類別對像素進行分類的語義分割…

VScode各文件轉化為PDF的方法

文章目錄 代碼.py文件.ipynb文本和代碼夾雜的文件方法 1:使用 VS Code 插件(推薦)步驟 1:安裝必要插件步驟 2:安裝 `nbconvert`步驟 3:間接導出(HTML → PDF)本文遇見了系列錯誤:解決方案:問題原因步驟 1:降級 Jinja2 至兼容版本步驟 2:確保 nbconvert 版本兼容替代…

現代計算機圖形學Games101入門筆記(十五)

蒙特卡洛積分 為什么用蒙特卡洛積分&#xff0c;用來做什么&#xff1f;跟黎曼積分區別&#xff0c;黎曼積分是平均分成n等分&#xff0c;取每個小塊中間的值取計算每個小塊面積&#xff0c;再將n份集合加起來。蒙特卡洛積分就是隨機取樣&#xff0c;假設隨機取樣點xi,對應的f…

軟件架構之-論高并發下的可用性技術

論高并發下的可用性技術 摘要正文摘要 ;2023年2月,本人所在集團公司承接了長三角地區某省漁船圖紙電子化審查系統項目開發,該項目旨在為長三角地區漁船建造設計院、以及漁船審圖機構提供一個便捷化的服務平臺。在此項目中,我作為項目組成員參與了項目建設工作,并擔任系統架…

Q-learning 算法學習

Q-learning是一種經典的無模型、基于價值的算法&#xff0c;它通過迭代更新狀態-動作對的Q值&#xff0c;最終找到最優策略。 一 Q-learning的核心思想 1.1目標 學習一個狀態-動作價值函數 &#xff0c;表示在狀態 s 下執行動作 a 并遵循最優策略后的最大累積獎勵。 的核心…

鴻蒙生態崛起:開發者機遇與挑戰并存

&#x1f493; 博客主頁&#xff1a;倔強的石頭的CSDN主頁 &#x1f4dd;Gitee主頁&#xff1a;倔強的石頭的gitee主頁 ? 文章專欄&#xff1a;《熱點時事》 期待您的關注 目錄 引言 一、何為鴻蒙生態&#xff1f; 二、在鴻蒙生態下開發時遇到的挑戰 三、對于鴻蒙生態未…

TCP/IP-——C++編程詳解

1. TCP/IP 編程基本概念 TCP&#xff08;傳輸控制協議&#xff09;&#xff1a;面向連接、可靠的傳輸層協議&#xff0c;保證數據順序和完整性。IP&#xff08;網際協議&#xff09;&#xff1a;負責將數據包路由到目標地址。Socket&#xff08;套接字&#xff09;&#xff1a…

Python圖像處理基礎(三)

Python圖像處理基礎(三) 文章目錄 Python圖像處理基礎(三)2、計算機色彩(Computer Color)2.5 色彩分辨率2.6 灰度顏色模型2.7 CMYK 顏色模型2.7.1 K 部分2.8 HSL/HSB 顏色模型2、計算機色彩(Computer Color) 2.5 色彩分辨率 人眼可以看到許多不同的顏色,但我們的感知…

Vue路由深度解析:Vue Router與導航守衛

Vue路由深度解析&#xff1a;Vue Router與導航守衛 一、Vue Router基礎與安裝配置 1. Vue Router核心概念 Vue Router是Vue.js官方的路由管理器&#xff0c;主要功能包括&#xff1a; 嵌套路由映射模塊化的路由配置路由參數、查詢、通配符細粒度的導航控制自動激活的CSS類鏈…

前后端分離微服務架構

前后端分離微服務架構 介紹: 前端通過Vue和ElementUI構建界面&#xff0c;使用axios調用后端API。Nginx作為反向代理&#xff0c;將請求路由到Zuul網關。Zuul進行權限驗證&#xff08;JWT&#xff09;后&#xff0c;將請求分發到微服務。(身份驗證,安全防護(sql注入,xxs跨網站…

iOS 工廠模式

iOS 工廠模式 文章目錄 iOS 工廠模式前言工廠模式簡單工廠案例場景分析蘋果類優點缺點 小結 工廠模式客戶端調用**優點****缺點** 抽象工廠模式三個模式對比 前言 筆者之前學習了有關于設計模式的六大原則,之前簡單了解過這個工廠模式,今天主要是重新學習一下這個模式,正式系統…

【機器學習】工具入門:飛牛啟動Dify Ollama Deepseek

很久沒有更新文章了,最近正好需要研究一些機器學習的東西&#xff0c;打算研究一下 difyOllama 以下是基于FN 的dify本地化部署&#xff0c;當然這也可能是全網唯一的飛牛部署dify手冊 部署 官方手冊&#xff1a;https://docs.dify.ai/en/getting-started/install-self-hos…