Description

一排可以转动的密码锁,现在给你很多个区间,你可以操作同时转动这个区间内的密码锁,能够通过转动使之一样的密码锁为一种密码

如可以操作2~4这个区间:那么ABBB 和AAAA是一个密码

问你这个密码锁总共有多少种不同的密码

思路:

如果这题没有转动限制的话,那么答案很明显,就是(n为区间大小)26的n次方,但是由于可以转动所以有些锁的状态会重复,那么同一个状态重复了多少次呢!!!!设有cnt个可以自由移动的区间,那么重复次数就是26的cnt次方(想一想为什么,和数学的排列组合很像),那么除以重复次数就可以了

结果是26的(n-cnt)次方种不同的状态锁,显然要用到快速幂

现在最大的问题就是怎么求独立区间个数,

模拟过程:

现在有一个独立区间A[1,4]和B[5,8],现在多出来一个C区间[1,9],显然C任何一种状态都可由转动AB这两个得到,那么C的加入并没有增加新的独立区间,此时C=A+B,同理C=A-B也没有增加新的独立区间

容易发现没有增加新的独立区间的C有一个特点,C区间的两端已经"连在"了一起.

而这种是通过并查集实现的!!!只想说为什么这么神奇!!!!!每次增加一个区间的 时候就把区间左端点和右端点+1联合起来,如果一个新增加的区间左端和右端+1并没有在一个集合,说明这是一个独立区间,否则不是,就这样统计独立区间个数

然后用快速幂就好了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#include<cstdlib>
#include<algorithm>
#include<stack>
#include<map>
#include<queue>
#include<vector> using namespace std;
const int maxn = 1e7+100;
const int MOD = 1000000007;
#define pr(x) cout << #x << " = " << x << " ";
#define prln(x) cout << #x << " = " << x <<endl;
#define ll long long
int p[maxn];
int findset(int x) {
return p[x] = x == p[x]? x: findset(p[x]);
}
bool unite(ll x, ll y) {
x = findset(x), y = findset(y);
if(x == y) return false;
p[x] = y;
return true;
}
ll fun(ll x, ll m) {
ll ans = 1;
while(m) {
if(m & 1) ans = ans * x % MOD;
x = x * x % MOD;
m >>= 1;
}
return ans % MOD;
}
int main(){
#ifdef LOCAL
//freopen("C:\\Users\\User Soft\\Desktop\\in.txt","r",stdin);
//freopen("C:\\Users\\User Soft\\Desktop\\out.txt","w",stdout);
#endif
ll m, n, l, r, cnt;
while( scanf("%lld%lld", &n, & m) == 2) {
cnt = n;
for(int i = 0; i <= n; ++i) p[i] = i;
for(int i = 0; i < m; ++i) {
scanf("%lld%lld", &l, &r);
cnt -= unite(l - 1, r);
}
cout << (fun(26,cnt)+MOD)%MOD << "\n";
}
return 0;
}

HDU3461_Code Lock的更多相关文章

  1. C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent

    看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...

  2. 多线程同步工具——Lock

    本文原创,转载请注明出处. 参考文章: <"JUC锁"03之 公平锁(一)> <"JUC锁"03之 公平锁(二)> 锁分独占锁与共享锁, ...

  3. java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)

    一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...

  4. InnoDB:Lock & Transaction

    InnoDB 是一个支持事务的Engine,要保证事务ACID,必然会用到Lock.就像在Java编程一下,要保证数据的线程安全性,必然会用到Lock.了解Lock,Transaction可以帮助sq ...

  5. 使用四元数解决万向节锁(Gimbal Lock)问题

    问题 使用四元数可以解决万向节锁的问题,但是我在实际使用中出现问题:我设计了一个程序,显示一个三维物体,用户可以输入绕zyx三个轴进行旋转的指令,物体进行相应的转动. 由于用户输入的是绕三个轴旋转的角 ...

  6. 万向节锁(Gimbal Lock)的理解

    [TOC] 结论 我直接抛出结论: Gimbal Lock 产生的原因不是欧拉角也不是旋转顺序,而是我們的思维方式和程序的执行逻辑没有对应,也就是说是我们的观念导致这个情况的发生. 他人解释 首先我们 ...

  7. 在多线程编程中lock(string){...}隐藏的机关

    常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...

  8. 谈谈 Lock

    上来先看MSDN关于lock的叙述: lock  关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁.  下面的示例包含一个 lock 语句. lock  关键字可确保当一 ...

  9. LOCK TABLES和UNLOCK TABLES与Transactions的交互

    LOCK TABLES对事务不安全,并且在试图锁定表之前隐式提交任何活动事务. UNLOCK TABLES只有在LOCK TABLES已经获取到表锁时,会隐式提交任何活动事务.对于下面的一组语句,UN ...

随机推荐

  1. LOJ 2234/BZOJ 3629 聪明的燕姿(数论+DFS)

    题面 传送门 分析 看到约数之和,我们首先想到约数和公式 若$ x=\prod_{i=1}^{n}p_i^{k_i} \(,则x的约数和为\) \prod_{i=1}^{n} \sum_{j=0}^{ ...

  2. pjhp实现使用redis来存储session数据

    #设置php处理session的方式为redis,并配置redis的访问地址(因为在redis中绑定的访问地址为127.0.0.1,所以就没有设置访问密码,如果需要请自行搜索)#因为不想修改php.i ...

  3. Python人工智能识别文字内容(OCR)

    环境准备 安装pytesseract和PIL 安装这两个包可以借助pip命令行安装 pip install PIL pip install pytesseract 安装识别引擎tesseract-oc ...

  4. 解决WordPress设置错误的url网站不能访问

    由于设置了未备案的域名,而导致网站访问不了了.同时WordPress是使用docker搭建部署的 docker ps #查看 docker 容器 CONTAINER ID IMAGE COMMAND ...

  5. JDBC的ResultSet游标转spark的DataFrame,数据类型的映射以TeraData数据库为例

    1.编写给ResultSet添加spark的schema成员及DF(DataFrame)成员 /* spark.sc对象因为是全局的,没有导入,需自行定义 teradata的字段类型转换成spark的 ...

  6. Linux设置数据库自动备份

    本文为转载,最末端为原地址 以CentOS 7.6系统与Oracle 11g为例: 一.先找到数据库的环境变量 如果是在root账户下,须先登录到数据库所在账户 su oraclecat ~/.bas ...

  7. oracle的分析函数over

    参考地址:https://www.cnblogs.com/chinas/p/7058771.html?utm_source=itdadao&utm_medium=referral#_lab2_ ...

  8. Flutter-Text

    text的主要属性有:textAlign,maxLines,overflow等. Text( "hello flutter!", TextAlign:TextAlign.cente ...

  9. [BZOJ5466][NOIP2018]保卫王国 倍增

    题面 首先可以写一个暴力dp的式子,非常经典的树形dp \(dp[i][0]\)表示\(i\)这个点没有驻军,\(dp[i][1]\)就是有驻军,\(j\)是\(i\)的孩子.那么显然: \[ \be ...

  10. 为什么我们从Angular 2迁移到Vue.js(为什么我们没有选择React)

    在Rever(www.reverscore.com),我们刚刚使用Vue.js发布了我们的Web客户端的新版本.经过641次提交和16周的紧张开发,我们非常自豪之前做出的决定.8个月前,我们的前端在使 ...