[SCOI2016]萌萌哒
mrclr两周前做的题让蒟蒻的我现在做?
第一眼组合计数,如果把数字相同的数位看作一个整体,除了第一位不能为零,剩下的每一位都有$0$~$9$十种。
设不同的位数为$x$,那么答案即为$9*10$x-1
给出两段相同的区间,可以把它们看作单独的一位一位对应,用并查集把它们合并。
复杂度为$O(n^2)$。
考虑优化。发现修改操作有$n$次,查询只有$1$次。
有效的修改操作最多只有$n-1$次,所以一定有重复的操作。
把复杂度平衡一下。合并区间时,直接将大区间合并,最后将合并标记从大到小下传。
这样,合并的复杂度变小,查询的复杂度变大了。用倍增——也就是二进制拆分的做法,可以让修改、查询的复杂度都变为$O(nlogn)$
$fa[x][i]$表示从$x$开始,长度为$2^i$的区间的父亲(区间),
合并时,将一段区间用二进制拆分成若干个区间并合并;
最后查询时,从最大的区间长度开始枚举,将$[x][i]$的左右两半区间分别与$fa[x][i]$的左右两半区间合并。
void pushdown() {
for(int j = ; j; j--)
for(int i = ; i+(<<j)- <= n; i++) {
int ii = getfa(i,j);
merge(i,ii,j-); //左一半
merge(i + (<<(j-)),ii + (<<(j-)),j-);//右一半
}
}
最后查询并查集个数即可w
代码如下
#include<cstdio>
#include<iostream>
#define MogeKo qwq
#define ll long long
using namespace std;
const int maxn = 1e5+;
const ll mod = 1e9+; int n,m,fa[maxn][];
int l1,l2,r1,r2;
ll cnt; ll qpow(ll a,ll b) {
ll ans = ;
ll base = a;
while(b) {
if(b&) (ans *= base) %= mod;
(base *= base) %= mod;
b >>= ;
}
return ans%mod;
} void init() {
for(int i = ; i <= n; i++)
for(int j = ; j <= ; j++)
fa[i][j] = i;
} int getfa(int x,int k) {
if(fa[x][k] == x)return x;
return fa[x][k] = getfa(fa[x][k],k);
} void merge(int x,int y,int k) {
int xx = getfa(x,k);
int yy = getfa(y,k);
fa[xx][k] = yy;
} void pushdown() {
for(int j = ; j; j--)
for(int i = ; i+(<<j)- <= n; i++) {
int ii = getfa(i,j);
merge(i,ii,j-);
merge(i + (<<(j-)),ii + (<<(j-)),j-);
}
} int main() {
scanf("%d%d",&n,&m);
if(n == ) {
printf("");
return ;
}
init();
for(int i = ; i <= m; i++) {
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
for(int j = ; j >= ; j--)
if(l1+(<<j)- <= r1) {
merge(l1,l2,j);
l1 += (<<j);
l2 += (<<j);
}
}
pushdown();
for(int i = ; i <= n; i++)
if(fa[i][] == i)cnt++;
printf("%lld",(*qpow(,cnt-))%mod);
return ;
}
[SCOI2016]萌萌哒的更多相关文章
- 【BZOJ 4569】 4569: [Scoi2016]萌萌哒 (倍增+并查集)
4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 865 Solved: 414 Description 一个长 ...
- 【LG3295】[SCOI2016]萌萌哒
[LG3295][SCOI2016]萌萌哒 题面 洛谷 题解 考虑现在我们如果一次只是限定两个位置相等该怎么做, 直接将这些位置用并查集并起来然后答案就是 \[ ans= \begin{cases} ...
- 4569: [Scoi2016]萌萌哒
4569: [Scoi2016]萌萌哒 链接 分析: 每次给出的两个区间长度是一样的,对应位置的数字也是一样的,那么可以将两两对应的数字用并查集合并,设最后有$cnt$个不同的集合,答案就是$9\ti ...
- 【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)(保证 ...
- Luogu P3295 [SCOI2016]萌萌哒(并查集+倍增)
P3295 [SCOI2016]萌萌哒 题面 题目描述 一个长度为 \(n\) 的大数,用 \(S_1S_2S_3 \cdots S_n\) 表示,其中 \(S_i\) 表示数的第 \(i\) 位, ...
- 洛谷P3295 [SCOI2016]萌萌哒 题解
洛谷P3295 [SCOI2016]萌萌哒 题目描述 公式粘过来就乱了,还是去洛谷看题吧 分析 如果暴力解决的话就是使用并查集把位数相同的数位并在一起.比如区间[1,2]和区间[3,4]的数字完全相同 ...
- BZOJ4569 : [Scoi2016]萌萌哒
建立ST表,每层维护一个并查集. 每个信息可以拆成两条长度为$2$的幂次的区间相等的信息,等价于ST表里两对点的合并. 然后递归合并,一旦发现已经合并过了就退出. 因为一共只会发生$O(n\log n ...
- 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^{连通 ...
随机推荐
- Jenkins定时构建时间设置
每隔5分钟构建一次 H/ * * * * 每两小时构建一次 H H/ * * * 每天中午12点定时构建一次 H * * * 每天下午18点定时构建一次 H * * * 在每个小时的前半个小时内的每1 ...
- leetcode — construct-binary-tree-from-preorder-and-inorder-traversal
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * * Source : https:/ ...
- leetcode — partition-list
/** * Source : https://oj.leetcode.com/problems/partition-list/ * * * Given a linked list and a valu ...
- 系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密
项目名称:客户管理系统 项目描述: 项目基于javaEE平台,B/S模式开发.使用Struts2.Hibernate/Spring进行项目框架搭建.使用Struts中的Action 控制器进行用户访问 ...
- spark问题
使用IDEA运行spark程序,除了需要导入spark的一些依赖包之外,还需要注意的是 当启动spark报找不到可执行的hadoop winutils.exe 可已下载相应版本的winutils.ex ...
- 学JAVA的第二天,静态网站制作,脑阔一点疼
先从下载apache-tomcat-9.0.17开始 在下边这个网站下载,下边一步步来 下面删除的这些是暂时用不上的,先吧它删除了,因为会拖慢启动速度 下边把ROOT里边除WEB-INF外的全不删除了 ...
- 接口测试之深入理解HTTPS
前言 随着网络安全问题越来越被重视,HTTPS协议的使用已经逐渐主流化.目前的主流站点均已使用了HTTPS协议:比如:百度.淘宝.京东等一二线主站都已经迁移到HTTPS服务之上.而作为测试人员来讲,也 ...
- import提升导致Fundebug报错:“请配置apikey”
摘要: 解释一下"请配置apikey"报错的原因. 部分Fundebug用户使用import来导入js文件时,出现了"请配置apikey"的报错,这是由于imp ...
- laravel项目thinksns-plus安装出现RuntimeException Symlink from * to * failed错误
今天xshell安装thinksns-plus的laravel项目时出现了一个错误, [RuntimeException] Symlink from "/root/www.z5w.net/t ...
- 把vux中的@font-face为base64格式的字体信息解码成可用的字体文件
在最近移动端项目中用到了vux,感觉用着还习惯,当把vux使用到PC端的时候出现了IE浏览器出现,这样的错误信息: CSS3114: @font-face 未能完成 OpenType 嵌入权限检查.权 ...