bzoj2375 疯狂的涂色
生活随笔
收集整理的這篇文章主要介紹了
bzoj2375 疯狂的涂色
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
瘋狂的涂色
Time Limit: 5 Sec Memory Limit: 128 MB
Description
小t非常喜愛畫畫,但是他還是一個初學者。他最近費盡千辛萬苦才拜到已仙逝的達芬奇為師(神仙?妖怪?謝謝)。達芬奇果然是畫雞蛋長大的,讓小t一入門就拿著一張白紙條瘋狂地涂色。假設紙條被劃分成了n個區域,用1~n的整數從左到右順序編號,達芬奇總共下達了m條指令。第I條指令是讓小t把編號為(Ip+q)mod n+1與(Iq+p)mod n+1(p,q為常整數)之間的區域(連續的一段區域)涂成第I種顏色。你可以假設達芬奇家中顏料的顏色數足夠多(達芬奇是畫雞蛋長大的)。
現在由于達芬奇下達的指令過多,小t一時應付不過來。達芬奇只讓他回答每一個區域最后的顏色。趁達芬奇還在“五谷輪回之所”忙碌時,小t偷偷的請讓你這個計算機高手幫他算出最后的顏色狀態,并告訴他。時間緊迫,要快喲!(達芬奇的指令次數多到惡心)
Input
為四個整數n,m,p,q。
Output
n行,第I行代表最后第I個格子的顏色。白色編號為0。
Sample Input
1000 999 341 547
(樣例自己腦補。。。。。)
和bzoj一起水一道題233.。。。
#include<cstdio> #include<algorithm> using namespace std; int fa[1000011],ans[1000011]; inline int find(int i) { return fa[i]==i ? i : fa[i]=find(fa[i]); } int main() {int n,m,p,q,l,r,tmp;scanf("%d%d%d%d", &n, &m, &p, &q);for(int i=1;i<=n+1;i++) fa[i]=i;for(int i=m;i;i--){l=(i*p+q)%n+1; r=(i*q+p)%n+1; if(l>r) swap(l,r); for(int j=find(l);j<=r;j=tmp){ans[j]=i;tmp=find(j+1);fa[j]=tmp;}if(find(1)==n+1) break;}for(int i=1;i<=n;i++) printf("%d\n",ans[i]);return 0; }轉載于:https://www.cnblogs.com/LLppdd/p/8673270.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的bzoj2375 疯狂的涂色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis配置文件配置
- 下一篇: 【RabbitMQ】2、心得总结,资料汇