luke的石板(组合数学)

news/2025/3/22 17:08:35/文章来源:https://www.cnblogs.com/bakul/p/18786773

问题 C: 鲁的石板

题目描述

宇宙大帝 Luke 拥有一颗璀璨的星球,名为 Lu3KO5(鲁星),这颗星球上存在着一块古老的圆形祭坛。祭坛由 n 个扇形石板组成,每一块石板都有细微的不同。为了能够让祭坛展现出其神秘的力量,Luke 需要用 m 种不同颜色的神秘能量将这些石板染色(每一块石板都必须染色)。

然而,为了保持祭坛的神圣与美观,Luke 要求相邻的两块扇形石板不能染成同一种颜色的能量。现在,Luke 想知道共有多少种不同的染色方案能够满足这个要求(只要有一个位置的石板颜色不同就算不同的染法)。

作为宇宙大帝,Luke 一眼就能看出答案,但他认为这对他来说太过简单,于是将问题交给了聪明的你。你能帮助他计算出所有可能的染色方案吗?

输入

输入第一行为一个正整数 T,表示 T 组数据。

接下来 T 行每行两个正整数 n 和 m。

输出

对于每一组数据输出一个整数,表示染色方案数量模 1000000007 后的结果。

样例输入

7
1 1
3 5 
5 5 
4 4 
1 2
100000 20
1000000000 50

样例输出

1 
60 
1020 
84 
29048415
90672511614

提示

对于 20% 的数据,\(1 ≤ T ≤ 5,1 ≤ n ≤ m ≤ 5\)
对于 50% 的数据,\(1 ≤ T ≤ 5,1 ≤ n ≤ 10^6\)
对于 100% 的数据 \(1 ≤ T ≤ 10^5,1 ≤ n ≤ 10^9,1 ≤ m ≤ 50\)

分析

这是一个环形染色问题,推导它的公式再用快速幂就是即可,
对于一个有\(n\)个区域环,有\(m\)个颜色可以选择,相邻的石块不能涂一样的颜色,将环从某两个区域分开,展开为一个线性排列,那么相邻元素不同的排列有\(m(m-1)^{n-1}\)种,设\(n\)个区域的环的涂色方案有\(a_n\)种,那么线性排列首位颜色有两种情况,

  1. 首位颜色相同,那么把首位两个区域叠成一个区域,那么组成了一个\(n-1\)个区域的环,就等于\(a_{n-1}\)
  2. 首位颜色不同,那么直接拼接首位成为一个\(m\)个区域的环,就等于\(a_n\)
    综合两种情况,得到方程\(a_n + a_{n-1} = m(m-1)^{n-1}\),所以\(a_n = (m-1)^n + (-1)^n(m-1)\)

代码

#include<bits/stdc++.h>
#define de(x) cout << #x << "=" << (x) << '\n'
#define de2(x,y) cout << #x << "=" << (x) << #y << "=" << y << '\n'; 
using namespace std;#define int long long
const int N = 1e9+7;inline int fast_fact(int n, int m){int base = m-1, nub = n,ans = 1;while(nub){if(nub&1) ans = ans%N*base%N;nub /= 2;base = base%N*base%N;}return ans + (n&1 ? -(m-1):(m-1));
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin >> t;while(t--){int n, m;cin >> n >> m;if(n == 1) cout << m%N << '\n';else if(n == 2) cout << m%N*(m-1)%N << '\n';else if(n == 3) cout << m%N*(m-1)%N*(m-2) << '\n';else {cout << fast_fact(n,m) %N<< '\n';}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903537.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word目录链接中只选中开头的文字

Word目录链接中只选中开头的文字 Word目录想选第一个字却选中整行 word自动生成目录里选中第一个字不是选整段就是选一行,怎么解决解决方法: 【不行】按上档键Shift+Home键。 【不行】Windows有个很强大的Alt健,按住Alt之后,在目录里面就可以想选哪个选哪个,不会出现再你这…

基于MPPT控制的锂离子电池充电器

基于MPPT的集成电路,可跟踪电源点并对电池充电,最大额定功率为1A,外形尺寸为TP4056。当谈到独立的单电池充电器时,只有一个流行的名字进入我的脑海,那就是我们的多功能锂离子/锂po TP4056电池充电器。这是广泛使用的,有很多功能与电池保护有关。锂电池在市场上很容易获得…

【Linux文件】把/etc/passwd删除了,该怎么办?

场景: 在做渗透测试发现网站存在任意文件删除漏洞,测试删除了/etc/passwd,那么删除后该如何恢复?一、 /etc/passwd文件的作用 /etc/passwd 是 Linux 系统中存储用户账户信息的关键文件,包含用户名、UID、GID、主目录路径和默认 Shell 等。删除 /etc/passwd 仍会导致以下问题…

20244210 实验一《Python程序设计》实验报告

20244210 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级:2442 姓名: 陈可 学号:20244210 实验教师:王志强 实验日期:2024年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变…

Linux命令:top

Linux命令:top 简介 Linux top 是一个在 Linux 和其他类 Unix 系统上常用的实时系统监控工具。它提供了一个动态的、交互式的实时视图,显示系统的整体性能信息以及正在运行的进程的相关信息。 语法 top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]参数说明:-d <秒数>:…

一次Java后端服务间歇性响应慢的问题排查记录

分享一个之前在公司内其它团队找到帮忙排查的一个后端服务连接超时问题,问题的表现是服务部署到线上后出现间歇性请求响应非常慢(大于10s),但是后端业务分析业务日志时却没有发现慢请求,另外由于服务容器`livenessProbe`也出现超时,导致容器出现间歇性重启。分享一个之前…

作业3:结对项目

这个作业属于哪个课程 软工23级这个作业要求在哪里 作业要求链接这个作业的目标 合作实现一个自动生成小学四则运算题目的命令行程序项目成员 陈日强 3123004736, 李铭恩 3123004745Github仓库链接 Math-Quiz-Generator一、PSP表格PSP2.1 阶段 任务 预估耗时(分钟) 实际耗时(…

鸿蒙NEXT开发案例:程序员计算器

【环境准备】 • 操作系统:Windows 10 • 开发工具:DevEco Studio 5.0.1 Release Build Version: 5.0.5.306 • 目标设备:华为Mate60 Pro • 开发语言:ArkTS • 框架:ArkUI • API版本:API 13 【项目背景与价值】 在程序员日常开发中,常常需要进行复杂的数学运算(如三角…

自定义异常--java进阶day08

1.自定义异常2.自定义异常的格式 看你想要定义哪种异常,对应的继承哪种异常类以我们之前写的代码举例,Exception类过于庞大,所有的异常子类都可以被它接收,这样就会导致无法精确捕获,所以我们要自定义异常我们自定义一个学生年龄异常定义了自己写的异常后,setAge里面抛出…

boolean io.swagger.v3.oas.models.media.Schema.getExampleSetFlag()

java17 <springdoc.version>2.3.0</springdoc.version> 错误信息 jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoSuchMethodError: boolean io.swagger.v3.oas.models.media.Schema.getExampleSetFlag() 确保项目中使用的 swagger-cor…

异常的两种处理方式--java进阶day08

1.异常的默认处理流程 java中,对于异常的默认处理方式是--向上抛出 之前我们说过,异常都是类,当某个程序出错后,就会自动生成该异常对象,而这个异常对象就如同一颗雷.java的异常默认处理方式--向上抛出,其中上,就是指上一级,调用该程序的那个逻辑 所以,在错误代码那一…

在centOS上更新yum资源报错:Cannot find a valid baseurl for repo: base/7/x86_64

在centOS中更新yum 的资源和新的依赖时,报:Cannot find a valid baseurl for repo: base/7/x86_64 报错内容:[root@localhost ~]# yum update 已加载插件:fastestmirror Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo…