[luogu P2391] 白雪皑皑
[luogu P2391] 白雪皑皑
题目背景
“柴门闻犬吠,风雪夜归人”,冬天,不期而至。千里冰封,万里雪飘。空中刮起了鸭毛大雪。雪花纷纷,降落人间。 美能量星球(pty 在 spore 上的一个殖民地)上的人们被这美景所震撼。但是 pty 却不高兴,他不喜欢白色的世界,他觉得这样太单调了。所以他想对雪花进行染色,让世界变得多彩些。
题目描述
现在有 N 片雪花排成一列。 Pty 要对雪花进行 M 次染色操作,第 i次染色操作中,把第(i*p+q)%N+1 片雪花和第(i*q+p)%N+1 片雪花之间的雪花(包括端点)染成颜色 i。其中 p,q 是给定的两个正整数。他想知道最后 N 片雪花被染成了什么颜色。
输入输出格式
输入格式:
包含 4 行:
N M p q 意义如题中所述。
输出格式:
包含 N 行:
第 i 行表示第 i 片雪花被染成的颜色 c
输入输出样例
说明
20%的数据满足:1<=n,m<=1000
40%的数据满足:1<=n<=8000,1<=m<=1000000
80%的数据满足:1<=n<=500000,1<=m<=10000000
100%的数据满足:1<=n<=1000000,1<=m<=10000000
保证 1<=M*p+q,M*q+p<=2*10^9
脑子都不好使了。。。并查集都用不来了。
对于这一题,我们可以把原问题转为做m次修改。
每一次修改,在一个区间内,把没有修改过的位置染上色(即修改)。
然后,最后输出每一个位置分别是哪一种颜色(即哪次修改,也可能为0,表示没有修改)。
妙用并查集,有点链表的味道,用fa[i]表示1~i里面,离i最近的没有被修改过的位置。
然后,对于一次修改,把当前位置修改好了就修改fa[i],一直到修改好为止(或是修改到0)。
由于每个位置最多被修改1次,所以复杂度是O(n)的。最多乘上一个并查集常数。
有个地方还需要探讨一下——就是路径压缩的问题。
对于这题,路径压缩之后有没有影响?
不存在的。我们可以吧点于点的关系看做是树,森林。
那么,事实上,只有根节点才没有被修改过,其他点都是已经修改过的,所以无论关系怎么变化,都不会有影响。
当然,运用并查集就是为了增快查询速度,而且路径压缩是关键。
注意,在更新fa[i]时,直接取i-1或fa[i-1]或get(i-1)就好,因为i这个位置被访问到当且仅当它第一次被更新到。
那么这样,根据定义,fa[i]就是get(i-1)了。
code:
#pragma GCC optimize(2) #include<cstdio> #include<cstring> #include<algorithm> typedef long long LL; namespace fastIO { inline int read() { ,f=; char ch=getchar(); ') { if (ch=='-') f=-f; ch=getchar(); } ') { x=(x<<)+(x<<)+ch-'; ch=getchar(); } return x*f; } ]; inline void write(int x) { ) { putchar('); return; } ) { x=-x; putchar('-'); } ; x; x/=) w[++cnt]=x%; ); } inline void newline() { putchar('\n'); } } namespace OJ{ void Online_Judge() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif } } ; int n,m,p,q,fa[N],cov[N]; inline int get(int x) { return fa[x]==x?x:fa[x]=get(fa[x]); } int main() { OJ::Online_Judge(); using namespace fastIO; n=read(),m=read(),p=read(),q=read(); ; i<=n; ++i) { cov[i]=; fa[i]=i; } int l,r; for (int i=m; i; --i) { l=(i*p+q)%n+,r=(i*q+p)%n+; if (l>r) std::swap(l,r); for (r=get(r); l<=r; r=get(r)) { cov[r]=i; fa[r]=r-; } } ; i<=n; ++i) { write(cov[i]); newline(); } ; }
[luogu P2391] 白雪皑皑的更多相关文章
- Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集
4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...
- 洛谷P2391 白雪皑皑(并查集)
题目背景 “柴门闻犬吠,风雪夜归人”,冬天,不期而至.千里冰封,万里雪飘.空中刮起了鸭毛大雪.雪花纷纷,降落人间. 美能量星球(pty 在 spore 上的一个殖民地)上的人们被这美景所震撼.但是 p ...
- 洛谷 P2391 白雪皑皑 线段树+优化
题目描述: 现在有 \(N\) 片雪花排成一列. Pty 要对雪花进行$ M $次染色操作,第 \(i\)次染色操作中,把\((i*p+q)%N+1\) 片雪花和第\((i*q+p)%N+1\)片雪花 ...
- 洛谷 P2391.白雪皑皑 (并查集,思维)
题意:有\(n\)个点,对这些点进行\(m\)次染色,第\(i\)次染色会把区间\((i*p+q)\ mod\ N+1\)和\((i*q+p)\ mod\ N+1\)之间的点染成颜色\(i\),问最后 ...
- 题解 SP2713 【GSS4 - Can you answer these queries IV】
用计算器算一算,就可以发现\(10^{18}\)的数,被开方\(6\)次后就变为了\(1\). 所以我们可以直接暴力的进行区间修改,若这个数已经到达\(1\),则以后就不再修改(因为\(1\)开方后还 ...
- 题解 CF920F 【SUM and REPLACE】
可以事先打表观察每个数的约数个数,观察到如果进行替换,若干次后这个数便会被替换成1. 所以我们可以直接暴力的进行区间修改,若这个数已经到达1或2,则以后就不再修改,用并查集和树状数组进行维护. 这个方 ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- [luogu P2170] 选学霸(并查集+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...
随机推荐
- Hadoop大数据学习视频教程 大数据hadoop运维之hadoop快速入门视频课程
Hadoop是一个能够对大量数据进行分布式处理的软件框架. Hadoop 以一种可靠.高效.可伸缩的方式进行数据处理适用人群有一定Java基础的学生或工作者课程简介 Hadoop是一个能够对大量数据进 ...
- php 中 global 与 $GLOBAL 的区别
很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是$GLOBALS['var'] 是外部的全局变量$var本身. global $var 是外部$var的同 ...
- 【DOM练习】淘宝购物车
HTML: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...
- DDL、DML和DCL的区别与理解
DML.DDL.DCL区别 . 总体解释: DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令 ...
- coredump文件抓取设置
ulimit -c unlimitedecho 1 > /proc/sys/kernel/core_uses_pidecho "/tmp/core-%e-%s-%u-%g-%p-%t& ...
- ltp-ddt nor_mtd_dd_rw_jffs2
nor_mtd_dd_rw_jffs2运行报错 error getting mtd part number: $part get_mtd_biggest_part for $DEVICE_TYPE: ...
- 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
- JDBC——Java语言连接数据库的标准
JDBC概述 API JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- main函数的的两个参数
C语言中main函数的参数有两个,这两个参数写为argc和argv.因此,main函数的函数头可写为:main(argc,argv);C语言还规定argc(第一个形参)必须是整型变量,argv( 第二 ...
- SAP 查询分析器,查询报表自动生成,SQL查询测试实现说明(转)
在日常的SAP开发和应用中,经常需要通过查询SAP数据表来处理日常业务,比如:数据对账.报表SQL测试.SAP查询功能开发等.通过开发SAP查询分析器,SAP实施和开发人员,可以在较短的时间内查询到需 ...