HDU 3461:Code Lock(并查集+二分求幂)

链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3461

原题:

Problem Description

A lock you use has a code system to be opened instead of a key. The lock contains a sequence of wheels. Each wheel has the 26 letters of the English alphabet 'a' through 'z', in order. If you move a wheel up, the letter it shows changes to the next letter in the English alphabet (if it was showing the last letter 'z', then it changes to 'a').

At each operation, you are only allowed to move some specific subsequence of contiguous wheels up. This has the same effect of moving each of the wheels up within the subsequence.

If a lock can change to another after a sequence of operations, we regard them as same lock. Find out how many different locks exist?

Input

There are several test cases in the input.

Each test case begin with two integers N (1<=N<=10000000) and M (0<=M<=1000) indicating the length of the code system and the number of legal operations.

Then M lines follows. Each line contains two integer L and R (1<=L<=R<=N), means an interval [L, R], each time you can choose one interval, move all of the wheels in this interval up.

The input terminates by end of file marker.

Output

For each test case, output the answer mod 1000000007

Sample Input

1 1

1 1

2 1

1 2

Sample Output

1

26

分析与总结:

伤不起啊, 理解这题的题意废了我N多脑细胞 。。。

题意是说有N个字母组成的密码锁, 如【wersdfj】,   每一位上的字母可以转动, w可转动变成x, z变成a。但是题目规定, 只能同时转动某个区间上的所有字母, 如【1,3】, 那么第1到第3个的所有字母要同时转动,那么【 wersdfj 】经过一次操作就变成 【 xfssdfj 】.    一共有M 个区间是可以操作的。  

题目还规定:If a lock can change to another after a sequence of operations, we regard them as same lock.

就是说, 经过可操作区间进行的操作得到的所有锁情况,都是同一个的。 也就是说,所有不同的锁就是“不可操作区间”的所有组合情况。

在最初时,每个字母看作是一个独立的区间, 那么就有N个区间, 可以很容易地用初始化的并查集来表示。然后一个区间可以看作是一个“元素”,  我们只需要求出共有多少个可操作区间x, 然后就可以计算得到N-x个不可操作的区间。 不可操作区间的所有组合,就是能组成的所有不同的锁。

本栏目更多精彩内容:http://www.bianceng.cn/Programming/sjjg/

每个区间可以有26种情况, 那么就共有26^(N-x)种情况。由于N可能会很大,所以直接计算浪费时间了,用二分求幂法来计算出结果。

这题最关键的一步是求出有多少个可操作区间。 用并查集来做时要注意,不能直接合并Union(L, R),  

假设有区间【1,3】, 【3,5】,【1,5】,  如果按照Union(L, R)来算, 那么得到两种可操作区间。但实际上是有3中可操作区间的,因为1~3, 3~5是有重叠了3的两个区间,所以1~5区间的情况不包括在前两个区间的情况内(可自己在纸上画画)。

如果是【1,3】, 【4,5】,【1,5】,  那么就是只有两种情况,因为最后一种的转动情况包含在了前两种转动的情况之内了。

只需稍微处理下,Union(L-1, R)或者Union(L, R+1)都可以。

代码:

#include<cstdio>
#define N 10000005
#define MOD 1000000007
int f[N],n,m;
void init(){
    for(int i=0; i<=n; ++i)
        f[i]=i;
}
int find(int x){
    int i, j=x;
    while(j!=f[j])j=f[j];
    while(x!=j){i=f[x]; f[x]=j; x=i;}
    return j;
}
bool Union(int x,int y){
    int a=find(x),b=find(y);
    if(a==b)return false;
    f[a] = b;
    return true;
}
long long myPower(int n){
    long long sum=1, tmp=26;
    while(n){
        if(n&1){
            sum = sum*tmp;
            sum %= MOD;
        }
        tmp = (tmp*tmp)%MOD;
        n>>=1;
    }
    return sum;
}
int main(){
    int l,r;
    while(~scanf("%d%d",&n,&m)){
        int cnt=0;
        init();
        for(int i=0; i<m; ++i){
            scanf("%d%d",&l,&r);
            --l;
            if(Union(l,r)) ++cnt;
        }
        printf("%lld\n", myPower(n-cnt)%MOD);
    }
    return 0;
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索lock
, of
, sequence
The
hdu并查集、并查集、带权并查集、可持久化并查集、并查集 路径压缩,以便于您获取更多的相关知识。

时间: 2024-09-20 15:19:49

HDU 3461:Code Lock(并查集+二分求幂)的相关文章

hdu 3461 Code Lock

点击打开hdu 3461 思路: 并查集+离散化+快速幂 分析: 1 题目给定长度为n的字符串,然后给定m个操作,询问最后的不同字符串的个数 2 考虑长度为n的时候,因为每个字符有26种情况('a'~'z'),所以有26^n.因为有m次的操作,题目中说了如果可以被变换那么认为是相同的字符串,那么不同的字符串就是所有不被操作区间的组合 3 那么我们利用并查集去求有操作的集合的个数,比如[1,3],[3,5]和[1,5]是三个集合,而[1,3],[4,5]和[1,5]则是2个集合 4 对于区间[l,

hdu 1811Rank of Tetris (并查集 + 拓扑排序)

/* 题意:这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B,小于B. 现在Lele并不是让你来帮他制作这个高手榜,他只是想知道,根据这些信息是否能够确定出这个高手榜,是的话就输出"OK". 否则就请你判断出错的原因,到底是因为信息不完全(输出"UNCERTAIN"),还是因为这些信息中包含冲突(输出"CONFLICT

并查集专题【完结】

个人整理 并查集 [poj] 第一题 poj 1182 食物链 点击打开链接poj 1182 思路: 带权并查集 分析: 1 典型的带权并查集的题目 2 如果x和y是同类的关系认为是0,如果是x吃y那么关系认为是1,那么x和y的关系为2就说明y吃x 3 那么如果x和y同类则rank[x] == rank[y] , 如果x吃y那么rank[x] == (rank[y]+1)%3 , 注意mod3的使用 点击查看代码 第二题 poj 1308 Is It A Tree? 点击打开链接 poj 130

HDU 1829 A Bug&#039;s Life(基础种类并查集)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1829 原题: Problem Description Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with b

HDU 3038 How Many Answers Are Wrong? :带权并查集

链接: http://acm.hdu.edu.cn/showproblem.php?pid=3038 题目: Problem Description TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always wooing TT to play the following game with him. This is a very humdrum game. T

HDU 2818 Building Block, poj 1988 Cube Stacking:带权并查集

链接: HDU: http://acm.hdu.edu.cn/showproblem.php?pid=2818 POJ:  http://poj.org/problem?id=1988 题目: Problem Description John are playing with blocks. There are N blocks (1 <= N <= 30000) numbered 1...N.Initially, there are N piles, and each pile contai

HDU 1811 Rank of Tetris(拓扑排序+并查集)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1811 题目: Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜,定时更新,名堂要比福布斯富豪榜还响.关于如何排名,这个不用说都知道是根据Rating从高到低来排,如果两个人具有相同的Rating,那就按这几个人的R

HDU 3938 Portal(离线+Kruskal+并查集)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=3938 题目: Problem Description ZLGG found a magic theory that the bigger banana the bigger banana peel .This important theory can help him make a portal in our universal. Unfortunately, making a pair of por

HDU 2473 Junk-Mail Filter 【并查集+设立虚父节点(马甲)】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2473 原题: Problem Description Recognizing junk mails is a tough task. The method used here consists of two steps: 1) Extract the common characteristics from the incoming email. 2) Use a filter matching t