题意描述:有一个类似滚轮式的密码锁放在一排共n个,有m种操作每次操作一个区间,且此次操作后的所有密码相同,问最多能形成多少种密码

解决:将区间分为可变部分和不可变部分,没当有可变部分时候总区间数要减去一。因为在可变 区间内第一个滚轮一定是固定的(可以转)

并查集合并区间后做下快速幂就好了 1 //组合数学+快速幂+并查集

 2 //统一区间内的组合数指数在原先基础上要减去1
 3 //证明可以枚举开始的字母因为是循环的所以第一个字母唯一
 4 //注意边界重叠的情况,初始化要从0开始
 5 
 6 #include<cstring>
 7 #include<cstdio>
 8 #include<algorithm>
 9 typedef long long ll;
 using namespace std;
 const int MAX = +;
 const int MOD = ;
 int pa[MAX];
 void make(int n)
 {
     for(int i=;i<=n;i++) pa[i]=i;
 }
 int find(int x)
 {
     return pa[x]==x? x: pa[x]=find(pa[x]);
 }
 int Union(int a,int b)
 {
     int fx=find(a);
     int fy=find(b);
     if(fx==fy) return ;
     else
     {
         pa[fx]=fy;
         return ;
     }
 }
 ll qmod(ll a,ll n)
 {
     ll res=;
     while(n>)
     {
         if(n&) res=res*a%MOD;
         a=a*a%MOD;
         n>>=;
     }
     return res;
 }
 int main()
 {
     int n,m,l,r;
     while(scanf("%d %d",&n,&m)>)
     {
         make(n); int cnt=;
         for(int i=;i<m;i++)
         {
             scanf("%d %d",&l,&r);
             if(Union(l-,r)) cnt++;
         }
         ll ans=qmod(,(ll)(n-cnt));
         printf("%I64d\n",ans%MOD);
     }
     return ;
 }

hdu3461的更多相关文章

  1. Code Lock[HDU3461]

    Code LockTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...

  2. 【uva12232/hdu3461】带权并查集维护异或值

    题意: 对于n个数a[0]~a[n-1],但你不知道它们的值,通过逐步提供给你的信息,你的任务是根据这些信息回答问题: I P V :告诉你a[P] = V I P Q V:告诉你a[P] XOR a ...

  3. hdu3461 Code Lock

    Problem Description A lock you use has a code system to be opened instead of a key. The lock contain ...

  4. hdu 3038 How Many Answers Are Wrong(种类并查集)2009 Multi-University Training Contest 13

    了解了种类并查集,同时还知道了一个小技巧,这道题就比较容易了. 其实这是我碰到的第一道种类并查集,实在不会,只好看着别人的代码写.最后半懂不懂的写完了.然后又和别人的代码进行比较,还是不懂,但还是交了 ...

随机推荐

  1. [Swift通天遁地]二、表格表单-(1)创建自定义的UITableViewCell(单元格类)

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. GG_Logs 日志类库封装使用说明

    3.6.GG_Logs 日志类库封装使用说明 GG_Logs类库项目,Nuget安装log4net 添加代码配置代码: [assembly: log4net.Config.XmlConfigurato ...

  3. c++ strcmp函数

    用法:加头文件 #include <string.h> 功能:比较字符串s1和s2. 一般形式:strcmp(字符串1,字符串2) 返回值: 当s1<s2时,返回值<0 当s1 ...

  4. [转]C语言/C++中如何产生随机数

    C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib. ...

  5. [洛谷3930]SAC E#1 - 一道大水题 Knight

    Description 他们经常在一起玩一个游戏,不,不是星际争霸,是国际象棋.毒奶色觉得F91是一只鸡.他在一个n×n的棋盘上用黑色的城堡(车).骑士(马).主教(象).皇后(副).国王(帅).士兵 ...

  6. 洛谷 P3437 [POI2006]TET-Tetris 3D

    二维线段树区间更新啊 树套树的外层树,如果是线段树的话一般似乎不能打标记?(毕竟标记不好下传) 然而起码对于这题是可以的...对于外层线段树,每个节点放两个内层线段树dat和setv,分别是得到的值和 ...

  7. 三分 HDOJ 3714 Error Curves

    题目传送门 /* 三分:凹(凸)函数求极值 */ #include <cstdio> #include <algorithm> #include <cstring> ...

  8. 283 Move Zeroes 移动零

    给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序.例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, ...

  9. 观察者模式(observer)c++实现

    1意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 2别名 依赖(Dependents), 发布-订阅(Publish-Subscribe ...

  10. malloc()函数的使用

    malloc是向系统申请分配指定size个字节的内存空间.返回值类型为void *类型.void *表示未确定的类型指针.C语言中,void *类型可以强制转换为任何其他类型的指针. 语法:void ...