这题一看是区间染色,直接上线段树。数据范围N<= 106,M <= 107,如果跑线段树复杂度为O(MlogN),但是时间限制10s,所以复杂度能过。

具体操作就是倒着算区间,因为每个馒头最后的颜色是最后一次染上的颜色,如果我们倒着染色,那么被染色过的点就是最后的颜色,之后再染这个点就没用了。所以直接上代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define N 1000100
#define ls (x << 1)
#define rs (x << 1 | 1)
#define mid ((l + r) >> 1)
using namespace std;
int tree[4 * N];
void push_up(int x)
{tree[x] = tree[ls] && tree[rs];//除了叶子节点之外的点只需要保存是否染过色就行return;
}
void modify(int x,int nl,int nr,int l,int r,int k)
{if(tree[x]) return;if(l == r) {tree[x] = k;//叶子节点直接保存颜色return;}if(nl <= mid) modify(ls,nl,nr,l,mid,k);if(nr > mid) modify(rs,nl,nr,mid + 1,r,k);push_up(x);return;
}
void print(int x,int l,int r)
{if(l == r) {printf("%d\n",tree[x]);//输出叶子节点return;}print(ls,l,mid);print(rs,mid + 1,r);
}
int p,q,n,m;
int main()
{scanf("%d %d %d %d",&n,&m,&p,&q);for(int i = m;i >= 1;i--){int l = (int)((long long)(i * p + q) % n + 1ll);//这里强制类型转换防止在做乘法的时候爆intint r = (int)((long long)(i * q + p) % n + 1ll);if(l > r) swap(l,r);modify(1,l,r,1,n,i);}print(1,1,n);
}

转载于:https://www.cnblogs.com/lijilai-oi/p/10945070.html

[BZOJ 2054]疯狂的馒头相关推荐

  1. [BZOJ 2054]疯狂的馒头(并查集)

    Description CQF十分喜欢吃馒头.兴奋之下他一下子买了N 个馒头请所有认识他的人吃. 但是CQF不喜欢白色,喜欢红色.黄色.绿色等鲜艳的颜色.于是他把所有白色的馒头排成一列.然后进行M 次 ...

  2. bzoj 2054: 疯狂的馒头(线段树||并查集)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2054 线段树写法: 点的颜色只取决于最后一次染的颜色,所以我们可以倒着维护,如果当前区间之前 ...

  3. Bzoj 2054: 疯狂的馒头

    题目 我们先想一想暴力模拟,算出l,r,染色,最后输出,很明显会超时.想一下每个点的最终颜色仅与它最后一次被染色的情况决定,这就是NOIP2011D1T1铺地毯复杂版. 我们可以用倒序将并查集将从左向 ...

  4. [BZOJ] 2054 疯狂的馒头

    只有最后一次染色有效,时光倒流,用并查集保证每个点只被染一次,染够n次及时退出,复杂度O(n) #include<iostream> #include<cstdio>using ...

  5. BZOJ 2054 疯狂的馒头

    [Description] n个点,m次操作,每次把(i*p+q)%n+1与(i*q+p)%n+1之间的点染上颜色i,被染过色的会被新颜色覆盖,求最后每个点的颜色. [题解] 因为被染过的颜色会被新的 ...

  6. Codevs 2054疯狂的馒头

    AC通道: http://www.lydsy.com/JudgeOnline/problem.php?id=2054 [分析] 对于任何一个馒头,只有最后一次刷才有意义.无论之前刷过多少次,它的颜色都 ...

  7. Bzoj P2054 疯狂的馒头 | 并查集

    题目链接 思路:因为每次染色都会将某些馒头的颜色彻底更改,所以每个馒头的最终的颜色其实是由最后一次染色决定的,那么我们只考虑最后一次染色即可.对此,我们可以从后往前倒着染色,当目前的染色区间中存在白色 ...

  8. 2054:疯狂的馒头/2375:疯狂的染色

    题目链接 题目大意:给定染色的顺序,每次染一个区间,每次染色会覆盖之前颜色,输出m次涂色后的每个点的颜色 题解:只有最后一次有用,所以倒着做 用f[i]=x来表示i到x-1这段区间已经被染过色了.当染 ...

  9. 【BZOJ 2054】 疯狂的馒头

    2054: 疯狂的馒头 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 449   Solved: 175 [ Submit][ Status] D ...

最新文章

  1. 调整Win7资源管理器中导航栏和计算机的位置
  2. 64匹马8个跑道需要多少轮才能挑选出最快的4匹马?
  3. VTK:vtkBalloonWidget用法实战
  4. 浅析php中的stdClass
  5. Fluent NHibernate之旅
  6. scrapy mysql测试连接_scrapy连接MySQL
  7. 图解 Go 切片的深拷贝和浅拷贝
  8. Win7 连接局域网共享之后 提示错误代码:0x800704b3(实测可用)
  9. 计算机应用基础 东师 离线,奥鹏东师秋季计算机应用基础离线作业答案
  10. 搭建一个自己的文件上传服务器。
  11. Java解压Zip 压缩包
  12. Win10搭建gym运行atari游戏pong
  13. 新浪微博相册图片外链限制,图床不显示解决方法总结!
  14. React的箭头函数详解
  15. python生成测试数据_Python基于Hypothesis测试库生成测试数据
  16. J2EE工作流管理系统jBPM详解(二)
  17. 突发!又一MCU大厂暂停接单!
  18. 帮转|腾讯云市场新版上线:大不同
  19. 中科大科学岛计算机复试,2020年中国科学技术大学研究生院科学岛分院复试办法及复试内容...
  20. 企业网络营销中需要避免的九大忌

热门文章

  1. 悲催的CamShift
  2. Android 内容提供者(Content provider)
  3. 文本处理三剑客之 awk
  4. Maven 使用 Tomcat7
  5. golang调试工具Delve
  6. 15.5.2 【Task实现细节】骨架方法的结构
  7. PXE 01-PXE介绍
  8. mybatis02--增删改查
  9. [周译见] C# 7 中的模范和实践
  10. Ubuntu14.04无法在var/www内新建文档