2017 計蒜之道 初賽 第五場

2021-08-02 02:03:30 字數 3466 閱讀 1015

ucloud 機房的網路搭建

ucloud 剛剛建立乙個新機房,近日正在進行網路搭建。機房內有 n

n 臺伺服器和 m

m 個分線器,整個機房只有乙個網線出口。分線器的作用是將一根網線轉換成多根網線。蒜頭君也知道每個分線器輸出的最大網線根數(不一定要將分線器輸出的每根線都用上),問你至少需要使用多少個分線器才能使得每台伺服器都有網線可用。

第一行輸入 n,m(0 \le n,m \le 100)n,

m(0≤

n,m≤

100)

。第二行輸入包含 m

m 個整數的陣列 a(0 \le a_i \le 10)a(

0≤a​

i​​≤

10) 表示每個分線器輸出的最大網線根數。

輸出最少需要的分線器數量。若不能使得所有伺服器都有網線可用,輸出一行impossible

一共需要 3

3 個分線器,最大輸出根數分別為 7,3,27,

3,2,連線方法如下圖所示:

樣例輸入

10 4

2 7 2 3

樣例輸出

3

//貪心

#include#include#include#includeusing namespace std;

int n,m;

int a[200];

int ans;

int main()

int i=m-1;

int j=1;

while(i>=0&&a[i]>1)

}i-=cnt;

}puts("impossible");

return 0;

}

ucloud 的安全秘鑰

每個 ucloud 使用者會構造乙個由數字序列組成的秘鑰,用於對伺服器進行各種操作。作為一家安全可信的雲計算平台,秘鑰的安全性至關重要。因此,ucloud 每年會對使用者的秘鑰進行安全性評估,具體的評估方法如下:

首先,定義兩個由數字序列組成的秘鑰 a

a 和 bb≈

) 的關係。a

a 和 b

b 近似匹配當且僅當同時滿足以下兩個條件:

此時,我們就稱 a

a 和 bba

≈b(1

,3,1

,1,2

)≈(2

,1,3

,1,1

)。ucloud 每年會收集若干不安全秘鑰,這些秘鑰組成了不安全秘鑰集合 t

t。對於乙個秘鑰 s

s 和集合 t

t 中的秘鑰 t

t 來說,它們的相似值定義為:s

s 的所有連續子串中與 t

t 近似匹配的個數。相似值越高,說明秘鑰 s

s 越不安全。對於不安全秘鑰集合 t

t 中的每個秘鑰 t

t,你需要輸出它和秘鑰 s

s 的相似值,用來對使用者秘鑰的安全性進行分析。

第一行包含乙個正整數 n

n,表示 s

s 串的長度。

第二行包含 n

n 個正整數 s_1,s_2,...,s_n(1\leq s_i\leq n)s​

1​​,

s​2​

​,..

.,s​

n​​(

1≤s​

i​​≤

n),表示 s

s 串。

接下來一行包含乙個正整數 m

m,表示詢問的個數。

接下來 m

m 個部分:

每個部分第一行包含乙個正整數 k(1\leq k\leq n)k(

1≤k≤

n),表示每個 t

t 串的長度。

每個部分第二行包含 k

k 個正整數 t_1,t_2,...,t_k(1\leq t_i\leq n)t​

1​​,

t​2​

​,..

.,t​

k​​(

1≤t​

i​​≤

n),表示 t

t 中的乙個串 tt。

輸入資料保證 t

t 中所有串長度之和不超過 20000020

0000

。對於簡單版本:1\leq n,m\leq 1001≤

n,m≤

100;

對於中等版本:1\leq n\leq 50000,1\leq m\leq 5001≤

n≤50

000,

1≤m≤

500;

對於困難版本:1 \le n \le 50000, 1 \le m \le 1000001≤

n≤50

000,

1≤m≤

1000

00。輸出 m

m 行,每行乙個整數,即與 t

t 中每個串 t

t近似匹配的 s

s 的子串數量。(3

,2,1

,3)≈

(2,3

,1,3

)(3,

2,1,

3)≈(

3,1,

3,2)

;(1,

3)≈(

3,1)

(1,3

)≈(1

,3);

(3,2

)≈(2

,3)(

3,2)

≈(3,

2)。

樣例輸入

5

2 3 1 3 234

3 2 1 3

21 3

23 2

樣例輸出

2

22

//簡單的直接暴力也可以過,這個是中版

#include#include#include#includeusing namespace std;

const int maxn=50000+10;

int a[maxn],b[maxn],n,m,nn;

int v1[maxn],v2[maxn];

int main()

memset(v2,0,sizeof(v2));

memset(v1,0,sizeof(v1));

for(int i=0; i

int ans=0;

int c=0;

for(int j=0; j

v1[a[j]]++;

for(int i=1; i<=n; i++)

if(v1[i]!=v2[i]) c++;

if(c==0) ans++;

for(int i=1; i<=n-m; i++)

printf("%d\n",ans);

}return 0;

}

2017 計蒜之道 初賽 第五場

a.ucloud 機房的網路搭建 ucloud 剛剛建立乙個新機房,近日正在進行網路搭建。機房內有 nn 臺伺服器和 mm 個分線器,整個機房只有乙個網線出口。分線器的作用是將一根網線轉換成多根網線。蒜頭君也知道每個分線器輸出的最大網線根數 不一定要將分線器輸出的每根線都用上 問你至少需要使用多少個...

2017計蒜之道程式設計大賽初賽第五場

第一題,從大到小排序,依次取就可以 includeusing namespace std int a 105 int cmp int a,int b int main printf d n ans return 0 1 6 1 2 第二題 我是暴力匹配的,複雜度m n n includeusing ...

2017 計蒜之道 初賽 第三場

在乙個長度為 ll 公尺的光滑軌道上,小車 a 在 00 時刻以 1 mathrm1m s 的速度從左端出發向右運動,小車 b 在 tt 時刻以 1 mathrm1m s 的速度從右端出發向左運動,兩個小車的質量相等。假設所有碰撞都是彈性碰撞,也就是當兩個小車相向碰撞時,他們各自會以原來的速度向相反...