日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小Z的梦 并查集

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小Z的梦 并查集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

小Z做了一個夢,夢中他終于得到了夢寐以求的德國牧羊犬,而且有好多只,小Z數了一下一共有N只,但不幸的是所有牧羊犬竟然都是白色的,小Z最不喜歡白色。于是他讓所有牧羊犬排成一排,準備對它們進行M次染色操作。每次他將連續的多個牧羊犬染成特定的某種顏色。一個牧羊犬最終的顏色是最后一次被染的顏色。如果某個牧羊犬沒有被染過色,那么它的顏色就是白色。

小Z決定采用下面的方法染色:在第i次染色操作中,把包括第i×A+BModN+1i×B+AModN+1

之間的所有牧羊犬染成顏色i,其中A,B是特定的兩個正整數。他想立刻知道最后每個牧羊犬的顏色。

輸入格式

第一行四個正整數N,M,A,B

輸出格式

一共輸出N行,第i行表示第i個牧羊犬的最終顏色(如果最終顏色是白色就輸出0)。

輸入樣例

4 3 2 4

輸出樣例

2 2 3 0

限制與約定

1N10000001M10000000

1M×A+BM×A+B231?1

時間限制:5s

空間限制:128MB

#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; const int maxn = 1000000 + 10 ; int f[maxn],ans[maxn]; int find(int x) {if( !f[x] || f[x]==x ) return f[x]=x;return f[x]=find(f[x]); } int main() {int n,m,a,b;cin>>n>>m>>a>>b; // for(int i=1;i<=n;i++) f[n]=i;for(int i=m;i;i--){int l=(i*a+b)%n+1;int r=(i*b+a)%n+1;if(l>r) swap(l,r);for(int j=find(l);j<=r;j=find(j)){ans[j]=i;f[j]=j+1;}}for(int i=1;i<=n;i++)printf("%d\n",ans[i]);return 0; }

?

轉載于:https://www.cnblogs.com/hfang/p/11240006.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的小Z的梦 并查集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。