当前位置: 首页 > news >正文

算法习题-经典环形涂色问题

在对某个圆上色,具体步骤为:  
首先在纸上画下一个圆O_1,然后在圆O1内画一个圆O2,圆O2 内不上色。  
现在将圆O1内除圆O2的区域等分为n个部分,如图所示。对此n个部分使用m种颜色上色,使得相邻两个区域的颜色不同,问共有多少种不同方案,由于结果可能很大,对10^9+7取模后输出。 (对于两种不同的方案,只要有一个区域上色的颜色不同,我们即认为是不同的)

解题思路:

a_n 表示当有n个部分,m种颜色时的所有方案数。考虑当n=1时,a_1=0因为当只有一个部分时,没有相邻的部分,不满足条件,因此种类有 0 个。考虑当n=2时,a_2=m*(m-1)。当有n个部分时,可以分为两种情况:

       1、 第 1 个和第 n-1 个相同时:第 n 个有 m-1 种选法,前 n-1 个的选法总数等于a_{n-2},因为第 1 个和第 n-1 个相同,因此相当于第 n-2 个直接连接在了第  1 个上,因此种数就相当于a_{n-2}因此,该种情况的总数为:(m-1)*a_{n-2}
       2、 第 1 个和第 n-1 个不同时:第 n 个有 m-2 种选法,而第 1 个到第 n-1 个就相当于一个完整的环,因此,种数为: a_{n-1} 因此,该种情况的总数为:(m-2) * a_{n-1}

由以上两种情况即可推导出递推式为:a_{n}=(m-2)*a_{n-1}+(m-1)*a_{n-2}\left ( n \geqslant 3 \right )

进一步化简,利用特征方程,进行尝试求解

变换形式:原式 = a_n-(m-2)*a_{n-1}-(m-1)*a_{n-2}=0
由于是二阶线性方程,

设 a_n=r^n,那末 a_{n-1}=r^{n-1}a_{n-2}=r^{n-2}
故:r^n-(m-2)*r^{n-1}-(m-1)*r^{n-2}=0
解得:r_1=-1r_2=m-1a_n=A*r_1^n+B*r_2^n

带入:a_1=0a_2=m*((m-1)
可得:a_n=(m-1)^n+(-1)^n*(m-1)

代码实现:

import java.util.*;
public class Main{static int p = (int)1e9 + 7;public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = sc.nextLong();long m = sc.nextLong();if(n == 2) System.out.println(m * (m-1) % p);else {long t1 = qmi(m-1,n);long t2 = (qmi(-1,n) * (m-1) + p) % p;System.out.println((t1 + t2) % p);}}static long qmi(long a,long k) {long res = 1;while(k != 0) {if((k & 1) == 1) res = res * a % p;a = a * a % p;k >>= 1;}return res;}
}

相关文章:

  • 边缘计算在工业自动化中的应用:开启智能制造新时代
  • RK3568平台开发系列讲解(调试篇)debugfs API接口及案例
  • 开源作业调度框架Quartz框架详细使用说明
  • 于烟火处拾诗意,在文字间见山河 ——《远方并不远》散文推荐
  • 【MQ篇】RabbitMQ之发布订阅模式!
  • 中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
  • easypoi 实现word模板导出
  • leetcode-哈希表
  • 本地(NAS/服务器)与云端(Docker/Kubernetes)部署详解与对比
  • 紧急救援手册:当系统弹出“无法启动此程序,因为计算机中丢失DLL“时该怎么做?
  • HSTL详解
  • Android Cordova 开发 - Cordova 快速入门(Cordova 环境配置、Cordova 第一个应用程序)
  • 论文精读:大规模MIMO波束选择问题的量子计算解决方案
  • QtDesigner入门
  • FFCV性能优化——快速加载大规模图像数据训练
  • Maven 项目中引入本地 JAR 包
  • 软考软件设计师30天备考指南
  • 【k8s系列7-更新中】kubeadm搭建Kubernetes高可用集群-三主两从
  • Kafka 主题设计与数据接入机制
  • AI健康小屋:解锁健康管理新密码
  • 中纪报刊文:新时代反腐败斗争为党赢得历史主动
  • 科普|结石疼痛背后的危机信号:疼痛消失≠警报解除
  • 金融监管总局:支持将上海打造成具有国际竞争力的再保险中心
  • 甘肃省政府原副省长赵金云严重职务违法被开除公职
  • 神舟二十号航天员乘组计划于10月下旬返回
  • 民建吉林省委提案:当前生育政策集中鼓励多孩生育,应该转变思路