4569: [Scoi2016]萌萌哒
4569: [Scoi2016]萌萌哒
分析:
每次给出的两个区间长度是一样的,对应位置的数字也是一样的,那么可以将两两对应的数字用并查集合并,设最后有$cnt$个不同的集合,答案就是$9\times 10 ^{cnt-1}$,第一个数不能是0。
暴力合并太慢了,考虑优化。对于一段区间,用倍增的思想分成log段,分别合并log段,最后的下放一下标记即可。类似线段树的懒标记。
代码:
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<iostream>
- #include<cmath>
- #include<cctype>
- #include<set>
- #include<queue>
- #include<vector>
- #include<map>
- using namespace std;
- typedef long long LL;
- inline int read() {
- int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
- for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
- }
- const int mod = 1e9 + , N = ;
- int f[][N], Log[N];
- int find(int x,int y) {
- return f[y][x] == x ? x : f[y][x] = find(f[y][x], y);
- }
- void Union(int a,int b,int c) { // 合并两个段 [a,a+(1<<c)-1] 与 [b,b+(1<<c)-1]
- if (find(a, c) != find(b, c)) f[c][f[c][a]] = f[c][b];
- }
- int main() {
- int n = read(), m = read(), cnt = ;
- for (int i = ; i <= n; ++i) Log[i] = Log[i >> ] + ;
- for (int j = ; j <= Log[n]; ++j)
- for (int i = ; i + ( << j) - <= n; ++i) f[j][i] = i;
- for (int i = ; i <= m; ++i) {
- int a = read(), b = read(), c = read(), d = read();
- for (int j = Log[b - a + ]; ~j; --j)
- if (a + ( << j) - <= b)
- Union(a, c, j), a += ( << j), c += ( << j);
- }
- for (int j = Log[n]; j; --j) { // 下放标记
- for (int i = ; i + ( << j) - <= n; ++i) {
- Union(i, find(i, j), j - );
- Union(i + ( << (j - )), find(i, j) + ( << (j - )), j - );
- }
- }
- for (int i = ; i <= n; ++i) if (find(i, ) == i) cnt ++;
- LL ans = ;
- for (int i = ; i < cnt; ++i) ans = ans * % mod;
- cout << ans;
- return ;
- }
4569: [Scoi2016]萌萌哒的更多相关文章
- 【BZOJ 4569】 4569: [Scoi2016]萌萌哒 (倍增+并查集)
4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 865 Solved: 414 Description 一个长 ...
- BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集
传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...
- bzoj 4569: [Scoi2016]萌萌哒
Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条 件表示为四个数,l1,r1,l2,r2,即两个长度相同的 ...
- BZOJ 4569: [Scoi2016]萌萌哒 [并查集 倍增]
传送门 题意:长为$n \le 10^5$的数字,给出$m \le 10^5$个限制$[l1,r1]\ [l2,r2]$两个子串完全相等,求方案数 把所有要求相等的位置连起来,不就是$9*10^{连通 ...
- bzoj 4569 [Scoi2016]萌萌哒 并查集 + ST表
题目链接 Description 一个长度为\(n\)的大数,用\(S_1S_2S_3...S_n\)表示,其中\(S_i\)表示数的第\(i\)位,\(S_1\)是数的最高位,告诉你一些限制条件,每 ...
- BZOJ 4569 [Scoi2016]萌萌哒 ——ST表 并查集
好题. ST表又叫做稀疏表,这里利用了他的性质. 显然每一个条件可以分成n个条件,显然过不了. 然后发现有许多状态是重复的,首先考虑线段树,没什么卵用. 然后ST表,可以每一层表示对应的区间大小的两个 ...
- 【LG3295】[SCOI2016]萌萌哒
[LG3295][SCOI2016]萌萌哒 题面 洛谷 题解 考虑现在我们如果一次只是限定两个位置相等该怎么做, 直接将这些位置用并查集并起来然后答案就是 \[ ans= \begin{cases} ...
- 【BZOJ4569】[Scoi2016]萌萌哒 倍增+并查集
[BZOJ4569][Scoi2016]萌萌哒 Description 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条件表示为四 ...
- [BZOJ4569] [Luogu 3295] [SCOI2016]萌萌哒(并查集+倍增)
[BZOJ4569] [Luogu 3295] [SCOI2016]萌萌哒(并查集+倍增) 题面 有一个n位的十进制数a(无前导0),给出m条限制,每条限制\((l_1,r_1,l_2,r_2)(保证 ...
随机推荐
- webkit、cef、nwjs、electron、 miniblink浏览器内核优缺点
市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit.cef.nwjs.electron. 1.cef:优点是由于集成的chromium内核,所以对H5支持的很全,同时因为使用的人也多, ...
- 借助System.Linq.Dynamic, IQueryable根据排序字符串排序
在使用Entity Framework时,若有多个排序,需要OrderBy (OrderByDescending)再ThenBy (ThenByDescending) 假设需要根据Name升序排序,再 ...
- 1.windows下Redis安装
参考文档:https://www.cnblogs.com/Leo_wl/p/6392196.html?utm_source=itdadao&utm_medium=referral Redis数 ...
- 解决NSTextContainer分页时文本截断问题
解决NSTextContainer分页时文本截断问题 NSTextContainer与NSLayoutManager配合使用可以将大文本文件分页,但是,分页过程中会遇到问题,显示字符被截断的问题:) ...
- Linux zip命令详解
zip常见命令参数 Usage: zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list] The ...
- 铁乐学Python_day11_闭包函数
一.[函数名] 1)函数名本质上它也是一种变量,特殊的变量: (碰到同名其它变量,依照从上往下的代码执行赋值.) 单独打印函数名,输出的是它对应的内存地址: 例: def funcl(): print ...
- October 09th 2017 Week 41st Monday
My motto is: Contended with little, yet wishing for more. 我的座右铭是:为一点点感到满足,但希望获得更多. If you can live y ...
- September 23rd 2017 Week 38th Saturday
Lonely people will always remember his life occurred in each person. 寂寞的人总是会用心记住他生命中出现过的每个人. If you ...
- eoLinker-AMS接口管理系统
多端阅读<eoLinker-AMS接口管理系统>: 在PC/MAC上查看:下载w3cschool客户端,进入客户端后通过搜索当前教程手册的名称并下载,就可以查看当前离线教程文档.下载eoL ...
- JavaScript的DOM操作获取元素的大小
通过 style 内联获取元素的大小 需要注意的是style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <!DOCTYPE html> ...