2008省選模擬 瘋狂的饅頭 並查集

2022-02-04 08:17:14 字數 898 閱讀 6911

cqf十分喜歡吃饅頭。興奮之下他一下子買了n個饅頭請所有認識他的人吃。但是cqf不喜歡白色,喜歡紅色、黃色、綠色等鮮豔的顏色,於是他把所有白色的饅頭排成一列。然後進行m次染色操作。每個染色操作都是用乙個神奇的刷子把連續的多個饅頭染成特定的某種顏色。乙個饅頭最終的顏色是最後一次染它的顏色。如果乙個饅頭沒有被染過色,那麼它的顏色就是白色。現在cqf已經定好了染色計畫;在第i次染色操作中,把第(ip+q)mod n+ 1個饅頭和第(iq+p)mod n+1個饅頭之間的饅頭染成顏色i,其中p,q是特定的兩個正整數。他想立即知道最後每個饅頭的顏色。你能幫他嗎?

輸入檔案僅一行為四個正整數n,m,p,q。

輸出檔案一共n行,第i行表示第i個饅頭的最終顏色(如果最終顏色是白色就輸出0)。

4 3 2 422

30【資料範圍】:

在20%的資料中,1<=n<=1000,1<=m<=10000;

在40%的資料中,1<=n<=10000,1<=m<=100000;

在60%的資料中,1<=n<=50000,1<=m<=500000;

在80%的資料中,1<=n<=300000,1<=m<=3000000;

在100%的資料中,1<=n<=1000000,1<=m<=10000000;

保證所有的輸入資料中1<=mp+q,mq+p<=2^31-1

#include #include #define maxn 1000005

using namespace std;

int fa[maxn],num[maxn];

int getfa(int x)

int main()

for(int i=1;i<=n;++i) printf("%d\n",num[i]);

return 0;

}

並查集 bzoj2054 瘋狂的饅頭

因為只有最後被染上的顏色會造成影響,所以倒著處理,用並查集維護已經染色的區間的右端點,即fa i 為i所在的已染色區間的右端點,這樣可以保證o n 的複雜度。include includeusing namespace std define n 1000001 inline void p int x...

BZOJ2504 瘋狂的饅頭 並查集題

這個題是老師上課講的題,對我來說還能勉強接受,所以就寫了個解題報告。好了,先看題 input 四個正整數,n,m,p,q。output n行,第i行表示第i個饅頭的最終顏色 樣例輸入 4 3 2 4 樣例輸出22 30額,這個呢,就是用並查集倒過來做,先讀入,然後從m到1來染色,一開始我也沒有想到,...

bzoj2054瘋狂的饅頭(巧用非遞迴並查集)

第一行四個正整數n,m,p,q 一共輸出n行,第i行表示第i個饅頭的最終顏色 如果最終顏色是白色就輸出0 題目大意 題目很簡潔了 題解 並查集巧用因為顏色是覆蓋上去的所以我們只要考慮最後一次染了什麼顏色就可以了倒著做上來 對於乙個染色的區間 l,r 我們只要將 l 指向 r 1 就好了,類似鍊錶的操...