記 2019藍橋杯校內預選賽(JAVA組) 賽后總結


引言

好像博客好久沒更新了 哈哈哈哈哈
趁現在有空更新一波
不知道還有沒有人看
確實該記錄一下每天做了什么了
不然感覺有些渾渾噩噩了

比賽介紹

全稱: 藍橋杯全國軟件和信息技術專業人才大賽
藍橋杯 實話 省賽就是花錢拿獎
去年啥都不懂 剛進大學還是個大一小萌新
C還沒用熟就混了個省二回來
確實感受到了比賽比較水
不愧是暴力杯
不過因為學校比較low的原因
沒有組織ACM等比賽
所以藍橋是我們能參加的可以說比較高的賽事了吧
畢竟一流的二本 二流的一本名不虛傳 hhhh
今年准備再打一下試試
看看能不能進國賽
說實話 大一以來做這么多硬件的東西
對算法這一塊還真的沒做多少

題目

填空題

1. 計算機存儲中 15.125GB是多少MB

這題好像根本沒挖坑
如果挖坑可以把大寫的B(Byte字節)改成小寫的b(bit比特)
估計跳進去的人才會有吧
沒啥好說的

題解: 15.125 * 1024
打開計算器敲一下就有了

2. 兩個二進制數11110011101和1111101001的和是多少?請用二進制表示

沒啥好說的
打開計算器
點開程序員模式-二進制
手敲一遍即得到答案

題解: 自己算去吧

3. 在2019個有區別的球中選3個球放在一個盤子里,請問有多少種選法?

藍橋杯果然是高中生剛來大學來虐大學生的
哈哈哈哈哈
組合數公式不用問了吧
好多你們的學長學姐都忘了

題解: C(2019, 3)

4. 一個包含有2019個結點的無向連通圖,最少包含多少條邊?

自己想一下
當然是一條鏈最少了
此時這個圖退化成一個樹了

題解: n - 1 = 2018

程序題

5. 遞增三元組

問題描述
在數列 a[1], a[2], ..., a[n] 中,如果對於下標 i, j, k 滿足 0<i<j<k<n+1 且 a[i]<a[j]<a[k],則稱 a[i], a[j], a[k] 為一組遞增三元組,a[j]為遞增三元組的中心。
給定一個數列,請問數列中有多少個元素可能是遞增三元組的中心。
輸入格式
輸入的第一行包含一個整數 n。
第二行包含 n 個整數 a[1], a[2], ..., a[n],相鄰的整數間用空格分隔,表示給定的數列。
輸出格式
輸出一行包含一個整數,表示答案。
樣例輸入
5
1 2 5 3 5
樣例輸出
2
樣例說明
a[2] 和 a[4] 可能是三元組的中心。
評測用例規模與約定
對於 50% 的評測用例,2 <= n <= 100,0 <= 數列中的數 <= 1000。
對於所有評測用例,2 <= n <= 1000,0 <= 數列中的數 <= 10000。

很容易理解的是
一個數 只要左邊有比它小的
右邊有比它大的 即符合
所以暴力解法就是直接暴力 沒啥好說的
dp解法: 維護兩個數組
分別是最長上升子序列的長度
和最長下降子序列的長度(倒序搜索)
轉移方程: dp[i] = max(dp[i], dp[j] + 1)

題解: 代碼略

6. 逆序對

問題描述
在數列 a_1, a_2, ..., a_n中,如果 a_i 和 a_j 滿足 i < j 且 a_i > a_j,則稱為一個逆序數對。
給定一個數列,請問數列中總共有多少個逆序數對。
輸入格式
輸入的第一行包含一個整數 n。
第二行包含 n 個整數 a_1, a_2, ..., a_n,相鄰的整數間用空格分隔,表示給定的數列。
輸出格式
輸出一行包含一個整數,表示答案。
樣例輸入
6
3 1 5 2 3 5
樣例輸出
4
評測用例規模與約定
對於 50% 的評測用例,1 <= n <= 100,0 <= 數列中的數 <= 1000。
對於所有評測用例,1 <= n <= 1000,0 <= 數列中的數 <= 10000。

這題比較有意思
據學長說是字節跳動的一面題 hhhh
學長說寫暴力的直接滾蛋
一般可以想到歸並排序
不過能想到樹狀數組的估計也很少了吧
哪天專門寫一篇介紹樹狀數組 (二叉索引樹)
用暴力這題絕對超時 (比如菜雞的我)

題解: 1. 歸並排序
邊歸並邊統計逆序數對的數量
統計完整個數組也有序了 挺方便的方法

題解: 2. 樹狀數組
學長居然說
“樹狀數組我校估計不超過十五個人聽說過”
“(雖然現在高中競賽生冊那已經開始學樹鏈剖分了”
(貼學長原話不會被打吧 hhhh)

7. 反倍數

問題描述
給定三個整數 a, b, c,如果一個整數既不是 a 的整數倍也不是 b 的整數倍還不是 c 的整數倍,則這個數稱為反倍數。
請問在 1 至 n 中有多少個反倍數。
輸入格式
輸入的第一行包含一個整數 n。
第二行包含三個整數 a, b, c,相鄰兩個數之間用一個空格分隔。
輸出格式
輸出一行包含一個整數,表示答案。
樣例輸入
30
2 3 6
樣例輸出
10
樣例說明
以下這些數滿足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
評測用例規模與約定
對於 40% 的評測用例,1 <= n <= 10000。
對於 80% 的評測用例,1 <= n <= 100000。
對於所有評測用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。

這題沒啥好說的 就是寫個check函數 然后把值扔進去
不過我做了個超簡單的dp(其實總覺得dp就是空間換時間)
篩了一些數 剛開始想了gcd 好像沒什么特殊發現就沒寫上去

題解: 確定入門題還需要題解?

8. 前序距離

問題描述
給定一個序列 a_1, a_2, ..., a_n。其中 a_1 是最大的數,沒有其他數與 a_1 相等。
對於從第二個數開始的每個數 a_i,請找到位置在 a_i 之前且比 a_i 大的,位置上距離 a_i 最近的數 a_j。稱 i-j 為 a_i 的前向距離。
對於給定的序列,請求出所有數的前向距離之和。
輸入格式
輸入的第一行包含一個整數 n,表示序列的長度。
第二行包含 n 個正整數,為給定的序列。
輸出格式
輸出一個整數,表示序列中所有數的前向距離之和。
樣例輸入
8
9 1 3 5 2 7 6 3
樣例輸出
14
樣例說明
序列中從第二項開始的前向距離依次為:
1, 2, 3, 1, 5, 1, 1
和為14。
數據規模和約定
對於70%的評測用例,1 <= n <= 1000;
對於所有評測用例,1 <= n <= 100000,a_1 <= 1000000。
請注意答案可能很大,可能需要使用 long long 來保存。

答案可能很大 emm 還是用了long 總覺得Java打這種一般用不上大整數類
除非一些題明確寫了高精度計算 不過這樣的題一般我也做不出來 太菜了
這題也需要優化 暴力肯定超時
學長說像“合唱隊形”
還是需要維護一個跳轉表
避免n!(話說階乘復雜度的代碼真的能跑完嗎)的匹配情況
感覺這樣的匹配表很像kmp 但是更像並查集
雖然還沒手撕過並查集

題解: 1. 並查集
一個數組prev表示前一個比當前數大的索引
然后后面的數比到這個數的時候如果相等就不用一路比回去了
極端情況下還是會超時 比如已知升序且無重復
[9999999, 1, 2, ..., 9999998]
優化一下:
···
prev[j]表示j之前離j最近比a[j]大的索引
那么a[j]肯定比從prev[j] + 1 到j - 1都大
所以當a[i] > a[j]時 [j, i - 1]范圍內的元素都比a[i]小
[prev[j], j - 1]范圍內的元素都比a[j]小
所以也一定比a[i]小
所以從prev[j]到j - 1可以直接跳
j直接跳到prev[j]即可接着查
···

9. V型坐標

問題描述
當夜深人靜時,小明喜歡獨自凝望着天空。
這一天,小明看着滿天的繁星,突發奇思妙想,他發現可以通過用直線連接天空中的星星來組成美麗的圖案。
小明想到一個非常簡單的圖案:大寫的V,如果連接三顆星星,中間一顆最靠下方,這樣的形狀就是一個大V了。
小明越想越着迷,他想知道,天空中最亮的 n 顆星星,可以有多少種方式組成大V。
為了更嚴謹的看待問題,小明把自己所見范圍的天空映射到了一個平面直角坐標系中,他看到的最亮的 n 顆星星在這個坐標系中都有自己的坐標。
如果三顆星星的坐標分別為 (x_i, y_i), (x_j, y_j), (x_k, y_k),當 x_i < x_j < x_k 且 y_j < y_i 且 y_j < y_k 時,這三顆星星就組成了一個大 V。
輸入格式
輸入的第一行包含一個整數 n 。
接下來 n 行,每行兩個整數,每一行表示一顆星星的 x 坐標和 y 坐標。
輸出格式
輸出一行包含一個整數,表示有多少種方式組成大V。
樣例輸入
5
4 5
2 3
1 4
3 3
5 8
樣例輸出
4
評測用例規模與約定
對於 30% 的評測用例,2 <= n <= 50,星星的坐標為不超過 1000 的非負整數。
對於 50% 的評測用例,2 <= n <= 100,星星的坐標為不超過 1000 的非負整數。
對於 80% 的評測用例,2 <= n <= 1000,星星的坐標為不超過 10000 的非負整數。
對於所有評測用例,2 <= n <= 5000,星星的坐標為不超過 100000 的非負整數。

小明腦子不太對系列
可以去知乎回答問題了
這題沒啥好講的
寫個check函數 然后就了事了
一開始忘了排序 傻傻的連樣例都沒過 還愣了我半分鍾
這題排序是對x排序 順帶改變y 別排錯了
不過還是要注意時間
感覺和第五題差不多 也是
維護兩個數組
分別是最長上升子序列的長度
和最長下降子序列的長度(倒序搜索)

題解: 略 和第五題一樣

10. 選節目

問題描述
小明要組織一台晚會,總共准備了 n 個節目。然后晚會的時間有限,他只能最終選擇其中的 m 個節目。
這 n 個節目是按照小明設想的順序給定的,順序不能改變。
小明發現,觀眾對於晚上的喜歡程度與前幾個節目的好看程度有非常大的關系,他希望選出的第一個節目盡可能好看,在此前提下希望第二個節目盡可能好看,依次類推。
小明給每個節目定義了一個好看值,請你幫助小明選擇出 m 個節目,滿足他的要求。
輸入格式
輸入的第一行包含兩個整數 n, m ,表示節目的數量和要選擇的數量。
第二行包含 n 個整數,依次為每個節目的好看值。
輸出格式
輸出一行包含 m 個整數,為選出的節目的好看值。
樣例輸入
5 3
3 1 2 5 4
樣例輸出
3 5 4
樣例說明
選擇了第1, 4, 5個節目。
評測用例規模與約定
對於 30% 的評測用例,1 <= n <= 20;
對於 60% 的評測用例,1 <= n <= 100;
對於所有評測用例,1 <= n <= 100000,0 <= 節目的好看值 <= 100000。

這題. 不知道是出題人的問題還是我的問題
沒看懂想要干什么
於是乎直接寫了排序之后輸出最大的m個(按原來次序)
出來問了學長 學長跟我寫的一樣 .. 看來都沒看懂出題人想干啥

題解: 就排個序 沒了 注意邊界處理

總結

因為校賽什么都不計入 加上還有點事情要處理
所以看了看題 寫了點東西 明白自己還有哪點不會就溜了
去年模擬我好像是全校倒數第一吧 hhhh 菜的真實
這次發現平時看一些題還是有用的
比如樹狀數組 雖然該用上的時候自己一時半會也撕不出來 (
歸並排序 並查集 各種dp
總之 加油!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM