2020年藍橋杯B組個人題解(熱的,不知道對錯)

文章目錄


現在是藍橋杯剛結束,趁着有記憶,寫下這篇博客,不知道對錯,如果我錯了,請指出。

A

因爲是到0就結束了,那麼每次看看-600是否結束,如果沒有結束就+300.然後時間+2*60
最後時間再加上剩下的能量/10
所以我的答案是3880

B

首先計算1921年的剩下時間+2020年度過的時間,最後再for一遍加上中間的每年的時間。
最後答案我有點忘了,開頭應該是52

C

我這個是按照最壞情況來算的,應該是100/10+10是最小的。
但是我這裏有人是按照概率去算的,他的答案是11,我不清楚哪個是對的,因爲我懶得看。

D

這道題,所有的數字不超過一位。
然後我用getilne讀入,查看每次前面的空格有幾個,然後用一個棧維護現在到的層數以及循環次數。
最終答案應該是241830

E

可以知道的是,一定是斜着的兩個可以交換位置,比如說2,3它只能在這兩個位置,或者互換,不能再到後面,否則就不合法。
在這裏插入圖片描述
所以答案是2m1=21009=5122^{m-1}=2^{1009}=512

F

讓你輸出除二的序列
這道題,注意使用longlong即可。

G

解碼
那麼直接for一遍,查看i+1是否是數字,然後循環輸出,注意到最後一個字符特判一下。

H

從1,1走到n,m
那麼狀態轉移方程應該是

dp[1][1]=1;
for(int i=1;i<=n;i++){
     for(int j=1;j<=m;j++){
         if(i==1&&j==1)continue;
         if(i%2==0&&j%2==0)continue;
         dp[i][j]=dp[i-1][j]+dp[i][j-1];
     }    
 }

I

查看兩個數合併是否是k的倍數
首先用unordered_map保存每個數101001000....*10,*100,*1000....直到109%k*10^9\%k之後的計數。
然後枚舉每個數作爲後面的情況,注意如果它本身也可以的話要-1.

J

每次有2個操作,要麼連邊,要麼將一個連通塊的所有點的值+t。
壓軸題可能只有cf上2200左右的水平,那麼解法也是比較容易理解的。
首先考慮並查集,這個顯然是一道並查集的題目,我考慮過可持久化並查集,但是有點忘了它是幹嘛的,於是就從其它地方下手。
首先考慮加值,我們肯定是將每次添加的值放到這個連通塊的根上,然後最後做一遍dfs將值向下傳遞。
那麼合併的時候我們就不能將存在的點作爲根,因爲這個點原來所在的並查集中還有值未向下傳遞。於是我們對於每次合併兩個不同連通塊的時候建一個虛點:
在這裏插入圖片描述
然後以虛點作爲根,這樣就可以避免值傳遞錯誤的問題。

#include<iostream>
using namespace std;
int main(){
	cout<<"沒有代碼,懶得寫"<<endl;
}

總結

第一次參加藍橋杯,比預想中簡單,甚至比模擬賽簡單,最後一題的難度超過了模擬賽的難度,但是暴力能拿0.7的分,所以區別不大。
但是其中有很多需要人細心的地方,因爲我也是第一次參加OI賽制,最終的對錯是看不見的,那麼就考驗選手自己發現問題的能力了。我也是在檢驗當中發現了很多的問題,比如說D題,我實在檢查的時候看到了“怎麼還有一個文件,這是哪道題的?”然後才發現D題不僅僅是題目中的那麼一點點。
其它就沒什麼感想了,至於程序設計題我思路應該沒有問題,就是不知道細節怎麼樣。
聽天由命吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章