16 瘋狂的饅頭

2021-09-24 23:02:16 字數 1334 閱讀 4007

cqf十分喜歡吃饅頭,興奮之下他一下子買了n 個饅頭請所有認識他的人吃。

但是cqf不喜歡白色,喜歡紅色、黃色、綠色等鮮豔的顏色。於是他把所有白色的饅頭排成一列。然後進行m 次染色操作。每個染色操作都是用乙個神奇的刷子把連續的多個饅頭染成特定的某種顏色。乙個饅頭最終的顏色是最後一次染它的顏色。如果乙個饅頭沒有被染過色,那麼它的顏色就是白色。

現在cqf已經定好了染色計畫:在第i次染色操作中,把第(i × p + q )mod n + 1個饅頭和第(i × q + p)mod n + 1個饅頭之間的饅頭染成顏色i,其中p, q是特定的兩個正整數。他想立即知道最後每個饅頭的顏色。你能幫他嗎?

第一行四個正整數n ,m ,p,q。

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

432

4

223

0

在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

並查集水題。。。從m到1倒序染色,染色的同時將該點與右邊合併,保證每個點只染色一次。

#include

#define m(a,b) memset(a,b,sizeof(a))

using

namespace std;

int fa[

1000005

],ans[

1000005];

long

long n,m,p,q,l,r,i,j;

inline

void

read

(long

long

&x)while

(ch>=

'0'&& ch<=

'9')

if(c==

'-')x=

-x;}

intfind

(int x)

return r;

}int

main()

}for

(i=1

;i<=n;i++

)printf

("%d\n"

,ans[i]);

return0;

}

瘋狂的饅頭

16.瘋狂的饅頭 描述 提交自定義測試 題目描述 cqf十分喜歡吃饅頭,興奮之下他一下子買了n 個饅頭請所有認識他的人吃。但是cqf不喜歡白色,喜歡紅色 黃色 綠色等鮮豔的顏色。於是他把所有白色的饅頭排成一列。然後進行m 次染色操作。每個染色操作都是用乙個神奇的刷子把連續的多個饅頭染成特定的某種顏色...

BZOJ 2054 瘋狂的饅頭

time limit 10 sec memory limit 162 mb submit 449 solved 175 submit status 第一行四個正整數n,m,p,q 一共輸出n行,第i行表示第i個饅頭的最終顏色 如果最終顏色是白色就輸出0 4 3 2 422 30並查集。一看這道題認為...

bzoj 2054 瘋狂的饅頭

想到了要用一種東西維護下乙個沒被染色的是什麼東西,但是沒想到是並查集。這道題就相當於在每乙個集合裡的數都會跳到乙個相同的點,就相當於並查集的代表元素。如果將乙個點染色,就把它的父親設為i 1,這樣並查集的代表元素就是下乙個沒有被染色的點。include include include include...