(区间操作) bzoj 2054
2054: 疯狂的馒头
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 449 Solved: 175
[Submit][Status]
Description
Input
第一行四个正整数N,M,p,q
Output
一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0)。
Sample Input
4 3 2 4
Sample Output
2
2
3
0
2
3
0
HINT
用并查集搞啊啊啊啊啊啊啊啊啊啊啊啊
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> using namespace std; int n,fa[1000010],m,p,q,col[1000010]; int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } int main() { int tot=0; scanf("%d%d%d%d",&n,&m,&p,&q); for(int i=1;i<=n;i++) fa[i]=i; for(int i=m;i>=1;i--) { int l,r; l=((long long)i*p+q)%n+1,r=((long long)i*q+p)%n+1; if(l>r) swap(l,r); for(int k=find(l);k<=r;k=find(k)) { col[k]=i; tot++; fa[k]=k+1; } if(tot==n) break; } printf("%d",col[1]); for(int i=2;i<=n;i++) printf(" %d",col[i]); printf("\n"); return 0; }