1. 程式人生 > >2018"百度之星"程序設計大賽 - 資格賽 - 題集

2018"百度之星"程序設計大賽 - 資格賽 - 題集

col 百度之星 假設 amp 不能 就是 erl 字典序 隨機數

1001

$ 1 \leq m \leq 10 $

像是狀壓的復雜度。

於是我們(用二進制)枚舉留下的問題集合

然後把這個集合和問卷們的答案集合 $ & $ 一下

就可以只留下被選中的問題的答案了。

之後掃一遍隨便判一下重。

1002

非空子串中字典序最小的子串長度一定是 $ 1 $ 。

咱們就記錄一下每一個字母出現次數的前綴和,

每次詢問就找到出現過的最先的那個字符就星了。

1003

整數規劃好像是個NPC問題,

所以我們肯定不能直接上整數規劃。

咱們來嘗試把問題轉換一下。

n=2

x1---y1
  \ /
   X
  / x2---y2

看起來像是個二分圖。

二分圖我們可以想到什麽呢?

KM算法。

它有一個奇特的性質,

就是假設 $ x_i $ 和 $ y_j $ 被一條邊 $ a_{i,j} $ 匹配上,

那麽 $ x_i $ 的標簽 $ l_i $ 和 $ y_j $ 的標簽 $ r_j $ 有這樣一個式子是成立的:

$ l_i + r_j \geq a_{i,j} $

題目要求 $ l_i + r_j \leq a_{i,j} $ ?

把它變成 $ - l_i - r_j \leq -a_{i,j} $ ,

然後硬上KM就好了。

註意標簽的初始值。

1004

如果你有好辦法,

請教教我這個蒟蒻吧。

1005

我們先想一下動態規劃。

設 $ f_{i,j} $ 表示以第 $ i $ 個數打止的長度為 $ j $ 的上升子序列個數。

首先 $ f_{i,1} = 1 $ 。

然後也可以知道 $ f_{i,j} = \sum{f_{k,j-1}} , k < i \quad \mathrm{and}\quad q_k < q_i $ 。

這可以用一些樹狀數組來幫助它轉移。

但是 $ 1 \leq n \leq 10000 $ ...

註意一下這句話。

你可以認為給定的排列是從所有 1,2,...,n 的排列中等概率隨機選出的。

如果是隨機數據的話,我們可以得知,

它的最長的lis不會太長

可能長度只有幾百也說不定。

1006

要答案最優的話,

就先只用條件中給定的2種顏色跑一遍最小生成樹,

然後“恰好k條滿足條件的邊”的答案就用剩下的邊從小往大加來更新答案。

的情況分別搞一下。

註意圖可能不連通。

2018"百度之星"程序設計大賽 - 資格賽 - 題集