(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...