2017百度之星初賽B場總結

2021-08-06 04:06:03 字數 1777 閱讀 6154

(a場因為不可抗力因素(?)沒能參加,b場還好算是磕磕碰碰地吃著低保過去了,真的菜呀)

可以說還是比較一目了然的簽到題,由於這些點的橫縱座標都必須嚴格遞增,那麼我們最多能取到的點就是mi

n(n,

m)個;方案數就相當於是在

max(n,

m)中選

min(n,

m)個的方案數,那麼答案就是c(

max(

n,m)

,min

(n,m

))了。

留意資料範圍,用楊輝三角預處理答案就可以了(先寫lucas定理再寫拓歐的我大概是失了智)。

這題大概是資料沒出好?據說t∗

n2∗l

ogn 的暴力也能過233

正解沒什麼頭緒,留坑待填(據jiangshibiao大神說是根據集合大小分開處理orz)

這道題的題意實際上是問我們乙個含有一定數量abcd且相鄰字元不相等的序列有多少個。乙個n4

的tle解法很快就能想出來了:用每個字元已經出現的次數和最後乙個字元表示狀態,然後再瞎dp一番。

至於正解,我們其實可以用一種類似於小朋友們學組合數學時用的「插板」的理解方式來理解這個過程。我們每一次把所有的某種字元擺放到原有的字元的中間,那麼這個過程中,就會有一些原本的連續相同字元段被分隔開,有一些新的連續相同字元段產生。由於每次放置一種字元,所統計的每種方案字元相對位置有所不同,所以不會出現重複統計的情況。可以用f[

i][j

] 表示已經放了i種字元,還存在j個連續相同字元段的方案數,f[

i]陣列和f[

i−1]

之間存在遞推關係(好像有點麻煩先挖個坑)。

(時間複雜度大概是o(

n2) ?)(感謝dhr小朋友)

是一道相當友好的網路流裸題了。s向每個片區連費用為a[

i]容量為b[

i]的邊,片區間連費用為0容量為無窮大的邊,每個片區向t連費用為−c

[i] 容量為d[

i]的邊。圖顯然不會出現負環,直接跑乙個spfa的最小費用流即可(增廣到費用不小於零的路徑就停止)。

#include

#include

#include

#include

#define inf 0x7f7f7f7f

using namespace std;

int d[1010],dis[510][510],n,m,a[1010],to[2000010],nxt[2000010],cap[2000010],path[1010],cnt,s,t;

bool inq[1010],boo[510][510];

void addedge(int u,int v,int c)

int spfa()}}

return d[t];

}int flow()

p=t;

while (p!=s)

return f;

}void solve()

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

dis[u][v]=min(dis[u][v],k);

dis[v][u]=dis[u][v];

}int ret=0,dist;

while (dist=spfa()) n",ret);

}int main()

醜陋的**。

簡單簽到題,先預處理出不重疊的區間,再維護連續的一段看看能不能被m天相連,最後處理多餘的補簽卡即可。

實話說這場比賽收穫不大……但為了有個好的新開始還是決定寫一篇口胡總結,畢竟得打回些狀態啊qaq。

百度之星 初賽B

a 傳送門 點我 求聯通塊個數,對於簡單圖而言,就是c v e,其中c就是聯通塊個數,v是頂點數,e是邊數 include include include include using namespace std const int max n 2e5 10 int n,m,k vectorg max...

百度之星2017初賽題解(A)

t1 簡單數論,問滿足 a0 a1 b an b n a0 a1 an mod p 的p的個數 即滿足p b 1 a1 b 2 1 a2 b 3 1 a3 即p b 1的p的個數 sqrt b 1 暴力列舉b 1約數即可 t2 現在給若干個條件,xi xj或xi xj,要你將它們劃分成若干組,滿足每...

2017百度之星初賽(B) 1001Chess

hdu 6114 題意 n行m列的矩陣,裡面盡可能的放最多的車,並且使得,車不相互攻擊 不同在一行或一列 同時要滿足,行數大的,列數也要大。思路 由於盡可能放最多的車。假設n大於m那麼最多可以放m輛車,那麼就從n中選m列出來放好車就行。所以答案是c n,m 主要是儲存一波c n,m 的打表模板。in...