Codevs 2054疯狂的馒头
来源:互联网 发布:点明安卓读屏软件 编辑:程序博客网 时间:2024/06/11 05:07
AC通道: http://www.lydsy.com/JudgeOnline/problem.php?id=2054
[分析]
对于任何一个馒头,只有最后一次刷才有意义。无论之前刷过多少次,它的颜色都是由最后一次刷决定。所以,我们可以考虑倒过来刷,如果已经刷过就不需要再刷了。我们可以用并查集维护这个链表,用fa[i]表示i右边第一个未刷过的的馒头。
核心代码:for(int j=find(l);j<=r;j=find(j)){color[j]=i;fa[j]=j+1;}
#include <iostream>#include <cstdio>using namespace std;int n,m,p,q;int fa[1000010];int color[1000010];int find(int x){int tmp=x,pre;while(tmp!=fa[tmp])tmp=fa[tmp];while(x!=tmp){pre=fa[x];fa[x]=tmp;x=pre;}return tmp;} int main(){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=(i*p+q)%n+1;int r=(i*q+p)%n+1;if(l>r){int t=l;l=r;r=t;}for(int j=find(l);j<=r;j=find(j)){if(j==0)break; //注意:如果不加这一条会导致超时color[j]=i;fa[j]=j+1; }}for(int i=1;i<=n;i++)printf("%d\n",color[i]);return 0;}
1 0
- Codevs 2054疯狂的馒头
- 【BZOJ 2054】 疯狂的馒头
- bzoj 2054 疯狂的馒头
- bzoj 2054: 疯狂的馒头
- [BZOJ]2054: 疯狂的馒头
- bzoj2054: 疯狂的馒头
- BZOJ2054疯狂的馒头
- 【BZOJ2054】疯狂的馒头
- bzoj2054 疯狂的馒头
- BZOJ2054 疯狂的馒头
- bzoj2054 疯狂的馒头
- 【BZOJ2054】疯狂的馒头
- 【bzoj2054】疯狂的馒头
- 2054:疯狂的馒头/2375:疯狂的染色
- BZOJ 2054 疯狂的馒头 并查集
- 【BZOJ 2054】疯狂的馒头 并查集
- bzoj 2054: 疯狂的馒头 并查集
- BZOJ 2054: 疯狂的馒头 并查集题解
- AndroidManifest文件简单说明
- HDOJ 2029 Palindromes _easy version(回文串)
- android获取控件宽高
- discuz登录出现HTTP Error 404. The requested resource is not found.
- ASP.NET记录错误日志的实现方法
- Codevs 2054疯狂的馒头
- USB设备枚举过程
- for循环
- leetcode33---Search in Rotated Sorted Array
- 快速制作机房3D效果图教程
- VC无闪烁刷屏技术的实现---VC中用GDI函数实规高速平滑动画
- Hadoop1.x中HDFS工作原理
- JAVA Comparator 和 Comparable
- 设计模式基本原则