洛谷P3295 [SCOI2016]萌萌哒 题解
洛谷P3295 [SCOI2016]萌萌哒
题目描述
公式粘过来就乱了,还是去洛谷看题吧
分析
如果暴力解决的话就是使用并查集把位数相同的数位并在一起。比如区间[1,2]和区间[3,4]的数字完全相同,那么我们就把1和3并在一起,在把2和4并在一起,这样它们的祖先相同,就相当于把它们绑定在了一起,同一个祖先它们的数字必定相同。这样我们只要最后统计独立的并查集的个数就可以了。我们设个数为n,这样最终的方案数就是9\(\times10\)n-1,因为除了最高位,所有位的数字都可以取到0~9。但是这样的效率是不能接受的,我们可以使用倍增的思想优化,我们定义fa\([x][y]\)为以x为起点长度为2\(^y\)的父亲,这样的话,读入解决了。那么最后的统计呢,我们再逐层下放至长度为1的区间就可以了,下放的时候不要忘了将每一层和它的上一层合并。
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=100010,mod=1e9+7;
int fa[22][maxn];
int zhao(int xx,int yy){
if(fa[yy][xx]==xx) return xx;
return fa[yy][xx]=zhao(fa[yy][xx],yy);
}
void bing(int xx,int yy,int l){
if(zhao(xx,l)!=zhao(yy,l))fa[l][fa[l][xx]]=fa[l][yy];
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<=20;i++){
for(int j=1;j<=n;j++){
fa[i][j]=j;
}
}
for(int i=1;i<=m;i++){
int aa,bb,cc,dd;
scanf("%d%d%d%d",&aa,&bb,&cc,&dd);
for(int j=20;j>=0;j--){
if(aa+(1<<j)-1<=bb){
bing(aa,cc,j);
aa+=1<<j,cc+=1<<j;
}
}
}
for(int i=20;i;i--){
for(int j=1;j+(1<<i)-1<=n;j++){
bing(j,zhao(j,i),i-1);
bing(j+(1<<(i-1)),fa[i][j]+(1<<(i-1)),i-1);
}
}
int cnt=0;
for(int i=1;i<=n;i++){
if(zhao(i,0)==i) cnt++;
}
long long ans=9;
for(int i=1;i<cnt;i++) ans*=10,ans%=(long long)mod;
printf("%lld\n",ans);
return 0;
}
洛谷P3295 [SCOI2016]萌萌哒 题解的更多相关文章
- 洛谷P3295 [SCOI2016]萌萌哒(倍增+并查集)
传送门 思路太妙了啊…… 容易才怪想到暴力,把区间内的每一个数字用并查集维护相等,然后设最后总共有$k$个并查集,那么答案就是$9*10^{k-1}$(因为第一位不能为0) 考虑倍增.我们设$f[i] ...
- 洛谷 3295 [SCOI2016]萌萌哒——并查集优化连边
题目:https://www.luogu.org/problemnew/show/P3295 当要连的边形如 “一段区间内都是 i 向 i+L 连边” 的时候,用并查集优化连边. 在连边的时候,如果要 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- Luogu P3295 [SCOI2016]萌萌哒(并查集+倍增)
P3295 [SCOI2016]萌萌哒 题面 题目描述 一个长度为 \(n\) 的大数,用 \(S_1S_2S_3 \cdots S_n\) 表示,其中 \(S_i\) 表示数的第 \(i\) 位, ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
随机推荐
- node实现图片分割
前言 最近,女王大大日常找我弄图片,本来之前我一直是ps帮他弄得,后来- -,ps不能分割过长的图片,我就想想能不能通过代码来帮他实现好了. 经过我在npm搜索一番,发现没有一个纯代码层面的high ...
- 更多的bash shell命令
1.探查进程:ps 2.实时监控进程:top 3.结束进程:kill.killall 4.查看挂载媒体:mount 5.移除设备:nmount 6.查看已挂载设备的使用情况:df 7.显示特定磁盘的使 ...
- tensorflow2.0学习笔记第一章第五节
1.5简单神经网络实现过程全览
- LNMP zabbix 4.4
硬件配置需求 环境 平台 CPU/内存 数据库 硬盘 监控主机数 小型 CentOS 2CPU/1GB MySQL.InnoDB 普通 100 中型 CentOS 2CPU/2GB MySQL.Inn ...
- 【Spring Boot 】1、Spring Boot 开始
0.写在最前面: 开始了新的征程,Spring Boot作为下一代的t开发框架,日渐流行.它作为spring mvc 的继承者,虽然二者之间没有多大联系,但是Spring Boot 的出现,大大简化 ...
- ping外网:unknown host www.baidu.comc排查
ping 百度出现:(ping www.baidu.com) "ping: unknown host www.baidu.com" 1.ping 网关确定是否连接上路由器,并 ...
- [xDebug] php下的Debug的调试
基础知识 对于php来说,debug的话,有个东西叫xdebug,当然配置这个时候,特别在mac下出了很多坑,这里强烈推荐一个mac下类似phpstudy的东西,叫做MxSrvs,了解一下? Xdeb ...
- MySQL 性能优化细节
服务器层面优化(了解) 将数据保存在内存中,保证从内存读取数据 设置足够大的innodb_buffer_pool_size,将数据读取到内存中. 建议innodb_buffer_pool_size设置 ...
- 深入理解 nth-child 和 nth-of-type 的区别
ele:nth-of-type(n) 为什么叫 of-type ,就是说它是以“type”来区分的,也就是说ele:nth-of-type(n)指的是父元素下第n个ele元素. ele:nth-ch ...
- animation 动画 与 transition
animation: name duration timing-function delay iteration-count direction; 值 描述 animation-name 规定需要绑定 ...