题目大意:一串项链由n个戒指组成,对于每个戒指,一共有M个点,R种颜色,且旋转后相同的戒指是相同的,然后一串项链又由N个戒指组成,同时要满足相邻的两个戒指不能相同,这串项链上某个位置插入了一个特殊的东西,且如果特殊的东西插入的地方不同,即使戒指都是相同的,这两串项链也是不同的,求一共有多少不同的爱之项链。

思路:首先可以求出一共有多少种不同的戒指,又由于有那个特殊的东西,相当于这串项链即使旋转后相同,但特殊的东西插入的位置也肯定是不同的,因此即不考虑旋转,只考虑相邻位置不同的爱之项链的方案数。

令ans表示有多少种不同的戒指。

然后这样就可以运用容斥原理。对于第i个戒指和第i+1个戒指相同,可以看成第i个限制,然后第n个限制即第n个戒指和第1个限制不同,那么即要求满足所有限制的方案数。令Si为满足第i个限制的方案数的集合,那么即求S1~Sn的交,也就是其补集的并,那么就是总方案数减去所有不满足任意一个限制数加上所有不满足任意二个限制数......

然后这个式子是怎样的呢,首先总方案数显然就是ans^n,然后不满足任意一个限制数即有两个相邻的相同,可以看成一条边连接的两个点相同,就是C(n,1)*ans^(n-1),以此类推,然后可以得到:sigma(0<=i<=n,(-1)^i*C(n,i)*ans^(n-i)),然后发现这就是二项式定理,就可以得到(ans-1)^n, 但真的就是这样吗?当i=n时,就会有一个Bug,用公式算得的答案是(-1)^n,然而n个限制均不满足时的情况即所有颜色都一样,有ans种,因此还要加上(n&1?1-m:m-1)才行。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 #define p 3214567
 8 #define maxn 200020
 9
10 int m,r,tot;
11 int prime[maxn],phi[maxn];
12 bool isprime[maxn];
13 long long n;
14
15 int power(int a,long long k){
16     if (k==0) return 1;
17     if (k==1) return a%p;
18     int x=power(a,k/2),ans=1ll*x*x%p;
19     if (k&1) ans=1ll*a*ans%p;
20     return ans;
21 }
22
23 int fphi(int x){
24     int ans=x;
25     for (int i=2;i*i<=x;i++)
26         if (x%i==0){
27             ans=ans-ans/i;
28             while (x%i==0) x/=i;
29         }
30     if (x!=1) ans=ans-ans/x;
31     return ans;
32 }
33
34 int main(){
35     scanf("%lld%d%d",&n,&m,&r);tot=0,memset(isprime,1,sizeof(isprime)),phi[1]=1;
36     for (int i=2;i<maxn;i++){
37         if (isprime[i]) prime[++tot]=i,phi[i]=i-1;
38         for (int j=1;j<=tot && i*prime[j]<maxn;j++){
39             isprime[i*prime[j]]=0;
40             if (i%prime[j]==0){
41                 phi[i*prime[j]]=phi[i]*prime[j];
42                 break;
43             }
44             phi[i*prime[j]]=phi[i]*(prime[j]-1);
45         }
46     }
47     int ans=0;
48     for (int i=1;i*i<=m;i++)
49         if (m%i==0){
50             ans=(ans+1ll*power(r,i)*fphi(m/i)%p)%p;
51             if (i*i!=m) ans=(ans+1ll*power(r,m/i)*phi[i]%p)%p;
52         }
53     ans=1LL*ans*power(m,p-2)%p;
54     int t=(1ll*power(ans-1,n)+(n&1?1-ans:ans-1))%p;
55     printf("%d\n",(t+p)%p);
56     return 0;
57 }

View Code

转载于:https://www.cnblogs.com/DUXT/p/5951747.html

bzoj4330:JSOI2012 爱之项链相关推荐

  1. BZOJ 4330 JSOI2012 爱之项链

    Problem G: JSOI2012 爱之项链 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 13  Solved: 5 [Submit][Sta ...

  2. 【2017 4 12 总结】

    今天做JSOI2012的题. 才120,其实是可以拿很多部分分什么的,但是都打错... (代码实现能力太差了. 1. 4330: JSOI2012 爱之项链 Time Limit: 10 Sec  M ...

  3. bzoj3202:[Sdoi2013]项链

    思路:首先考虑如何求珠子个数,一个珠子由a,b,c三个数组成且属于区间[1,a],并满足gcd(a,b,c)=1.由于要求本质相同,对于a,b,c这样的一个无序的数列且满足gcd(a,b,c)=1,设 ...

  4. 周大福周周好珠宝丨以爱之名,宠我万千

    无论爱人或被爱,先学会宠爱自己.以爱之名,个性绽放无限光芒.不定义不设限,每一面都很美.周大福匠心服务,让你闪耀璀璨魅力. 爱 ,我的炽热 爱似火焰,诠释热情与炽烈.爱似钻石,演绎美丽与坚贞.璀璨之心 ...

  5. [SDOI2009]HH的项链

    题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...

  6. 【每日DP】day12、P1063 能量项链(区间DP又一模板,震惊,只需要4行代码?)难度⭐⭐⭐

    P1063 能量项链 本题(NOIP2006)和石子合并(NOI1999)几乎一模一样 垃圾NOIP抄袭NOI,手动狗头 但是还是有细微的区别的,首先你得先能看懂题,石子合并是N堆石子,是i−ki-k ...

  7. P1203 [USACO1.1]坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

  8. HLG 1376 能量项链

    题意: 给你一个 含有 n 个珠子的项链,规定只有相邻的珠子才能合到一起并得到能量,合到一起的到的新的珠子,可以和其相邻的珠子继续合成,前后次序没有要求, 问你最大能的到多大的能量: 分析  :用 d ...

  9. 可以预防新冠病毒的项链 -脉动

    这是一款来自于美国航空航天局( NASA )用于预防感染新冠病毒的坠饰,它通过检测你的手是否靠近你的面部,使用震动来提醒你不要触碰你的面部鼻子.嘴巴,不要揉眼睛等.这套硬件是一个开源的项目,发布在 G ...

最新文章

  1. C#并行开发_Thread/ThreadPool, Task/TaskFactory, Parallel
  2. python strip() 函数探究
  3. 北京某打工子弟学校之一
  4. 有了malloc/free为什么还要new/delete ?
  5. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 sentinel 哨兵熔断限流断路器
  6. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_4 Mybatis的CRUD-查询一个和模糊查询
  7. BZOJ1101 [POI2007] Zap
  8. word是多线程的程序_线程的基本概念,实现多线程的四种基本方式
  9. 常见手机定位方式浅谈
  10. 如何把妹子拍得更好看?
  11. 玩转电脑|电脑回收站还能这么玩,自定义图标让你的回收站与众不同
  12. 2018AHU新生赛Panelatta与华容道题解
  13. Simulink的S函数仿真一阶RL和二阶RLC电路电路
  14. 2021爱分析·快消品牌数字化趋势报告——多点开花,快消品牌商数字化新探索
  15. 一张图彻底理解级联!!!!!
  16. Vue.js学习笔记—shop-bus:实战:利用计算属性、指令等知识开发购物车
  17. python调用大漠插件寻路_python怎么调用大漠?
  18. java从json数组中提取数据,从JSON数组中提取数据
  19. 原来linux自带编译器啊!!!
  20. 每日分享190210

热门文章

  1. mysql内存报警_[MySQL生产环境] Innodb存储引擎内存报警问题处理过程_MySQL
  2. CANopen | 对象字典OD 01 - canfestival对象字典编辑软件安装与使用
  3. requirejs插件-domReady插件
  4. 科来数据包生成器找不到网卡_CPU:网卡老哥,你到底怎么工作的?
  5. linux收发outlook的邮件,Linux邮箱服务器配置:如何让outlook收发邮件,怎么样控制中继...
  6. 计算机组成原理 北理,北京理工大学计算机组成原理期末复习.pdf
  7. django Sometimes request.session.session_key is None
  8. 影子卫士和影子系统哪个好用_影子系统是什么?会损害电脑硬盘吗?
  9. android 地址选择器_48种Android开发的开源库汇总
  10. 四、StringBuffer StringBuilder String 区别