藍橋杯 刷題記錄(2020 3 1)

2021-10-03 09:53:04 字數 4543 閱讀 9701

哈夫曼樹

2n皇后問題

fbi樹

矩陣乘法

源位址

輸入

兩行等長的字串,分別表示初始狀態和要達到的目標狀態。每行的長度<1000

輸出
乙個整數,表示最小操作步數

樣例輸入

樣例輸出

**

試想,每次翻就會翻好乙個,其實直接翻就是最優的翻法

#include

"iostream"

#include

"cstring"

#include

"algorithm"

using

namespace std;

intmain()

elseif(

!(str1[i +1]

^'o'))

else

sum++;}

} cout << sum;

return0;

}

源位址

huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。

給出一列數=,用這列數構造huffman樹的過程如下:

找到中最小的兩個數,設為pa和pb,將pa和pb從中刪除掉,然後將它們的和加入到中。這個過程的費用記為pa+ pb。

重複步驟1,直到中只剩下乙個數。

在上面的操作過程中,把所有的費用相加,就得到了構造huffman樹的總費用。

本題任務:對於給定的乙個數列,現在請你求出用該數列構造huffman樹的總費用。

例如,對於數列=,huffman樹的構造過程如下:

找到中最小的兩個數,分別是2和3,從中刪除它們並將和5加入,得到,費用為5。

找到中最小的兩個數,分別是5和5,從中刪除它們並將和10加入,得到,費用為10。

找到中最小的兩個數,分別是8和9,從中刪除它們並將和17加入,得到,費用為17。

找到中最小的兩個數,分別是10和17,從中刪除它們並將和27加入,得到,費用為27。

現在,數列中只剩下乙個數27,構造過程結束,總費用為5+10+17+27=59。

輸入

輸入的第一行包含乙個正整數n(n<=100)。

接下來是n個正整數,表示p0, p1, …, pn-1,每個數不超過1000。

輸出
輸出用這些數構造huffman樹的總費用。

樣例輸入
5

5 3 8 2 9

樣例輸出
**
#include

"iostream"

#include

"string"

#include

"algorithm"

using

namespace std;

intmain()

sort

(a, a + n)

;for

(int i =

1; i < n; i++

) cout << sum;

return0;

}

源位址

給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。

輸入
輸入的第一行為乙個整數n,表示棋盤的大小。

接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,如果乙個整數為0,表示對應的位置不可以放皇后。

輸出
輸出乙個整數,表示總共有多少種放法。

樣例輸入
4

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

樣例輸出
**
#include

"iostream"

#include

"cstring"

#include

"math.h"

using

namespace std;

class

game}}

int placeblackqueen (

int k)}if

(k == n)

for(

int i =

0; i < n; i++)}

}int placewhitequeen (

int k)}if

(k == n)

for(

int i =

0; i < n; i++)}

}};int

main()

noip全國聯賽普及組-2023年noip全國聯賽普及組

我們可以把由「0」和「1」組成的字串分為三類:全「0」串稱為b串,全「1」串稱為i串,既含「0」又含「1」的串則稱為f串。

fbi樹是一種二叉樹(如下圖),它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的「01」串s可以構造出一棵fbi樹t,遞迴的構造方法如下:

t的根結點為r,其型別與串s的型別相同;

若串s的長度大於1,將串s從中間分開,分為等長的左右子串s1和s2;由左子串s1構造r的左子樹t1,由右子串s2構造r的右子樹t2。

現在給定乙個長度為2n的「01」串,請用上述構造方法構造出一棵fbi樹,並輸出它的後序遍歷序列。

輸入

每組輸入資料的第一行是乙個整數n(0<=n<=10),第二行是乙個長度為2n的「01」串。

資料規模:

對於40%的資料,n<=2;

對於全部的資料,n<=10。

輸出
每組輸出包括一行,這一行只包含乙個字串,即fbi樹的後序遍歷序列。

樣例輸入
3

10001011

樣例輸出
ibfbbbfibfiiiff

**
#include

"iostream"

#include

"cstring"

#include

"algorithm"

using

namespace std;

struct node

;class

fbi_tree

else}if

(flagzero &&

!flagone)if(

!flagzero && flagone)

if(flagzero && flagone)

if(begin < end)

else

}void

postorder

(node *tree)}}

;int

main()

源位址

有n個矩陣,大小分別為a0a1, a1a2, a2a3, …, a[n-1]a[n],現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。

兩個大小分別為pq和qr的矩陣相乘時的運算次數計為pqr。

輸入
輸入的第一行包含乙個整數n,表示矩陣的個數。

第二行包含n+1個數,表示給定的矩陣。

輸出
輸出乙個整數,表示最少的運算次數。

樣例輸入
3

1 10 5 20

樣例輸出
**
#include

"iostream"

#include

"algorithm"

using

namespace std;

long

longdp(

long

long

*a,int n)

m[i]

[i]=0;

}// 連乘的矩陣位置差

for(

int len =

1; len < n; len++)}

}}return m[0]

[n -1]

;}intmain()

cout <<

dp(a, n)

;return0;

}

藍橋杯刷題記錄

problem f.wiki with string input file standard input time limit 1 second output file standard output memory limit 256 megabytes 現在有乙個字串s,s中只包含數字字元0 9,...

藍橋杯 刷題記錄(2019 11 16)

1115 dna 源位址蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。輸入本題有多組資料,每組資料由乙個正整數n組成。n不大於100 輸出對於每一組資料,輸出乙個n行的蛇形矩陣。兩組輸出之間不要額外的空行。矩陣三角中同一行的數字用乙個空格分開。行尾不要多餘的空格。樣例輸入樣例輸出1 3 6...

OI刷題記錄

2014 4 18 poj3264 bzoj1699 balanced lineup rmq 2014 4 19 bzoj1012 jsoi2008 最大數maxnumber noi2004 鬱悶的出納員 bzoj3224 tyvj 1728 普通平衡樹 2014 4 20 bzoj1862 105...