NC19115 选择颜色
NC19115 选择颜色
题目
题目描述
\(n\) 个人排成一个环形,每个人要从 \(c\) 种颜色中选择一个。
牛牛希望相邻的人选择的颜色是不同的
问有多少种方案。
输出方案数对 \(10007\) 取模的结果。
人是有顺序的,环旋转同构算不同的方案。
输入描述
输入只有一行,包含用空格分开的两个整数,表示 \(n\) 和 \(c\) 。
输出描述
输出一行一个整数,表示答案。
示例1
输入
4 3
输出
18
示例2
输入
1000000000 100
输出
726
说明
对 \(10007\) 取模。
备注
对于所有数据: \(3 \leq n \leq 1000000000, 3 \leq c \leq 100\)
\(20\) 分: \(c \leq 3\)
\(40\) 分: \(c \leq 4\)
\(70\) 分: \(n \leq 10000\)
题解
思路
知识点:快速幂,数学。
设 \(f_i\) 为考虑到了第 \(i\) 个人,并且第 \(i\) 个人与第 \(1\) 个人颜色是相同的情况数。
设 \(g_i\) 为考虑到了第 \(i\) 个人,并且第 \(i\) 个人与第 \(1\) 个人颜色是不同的情况数。
显然 \(f_i = g_{i-1}\) ,而 \(g_i = (c-1)f_{i-1} + (c-2)g_{i-1}\)。
把 \(g_i\) 表达出来,\(g_i = (c-1)g_{i-2} + (c-2)g_{i-1}\) ,随后解递推:
- 二阶线性递推方程的特征方程是 \(x^2 = px+q\) ,即 \(x^2 = (c-2)x + (c-1)\) ,解得 \(x = c-1 \ or\ -1\) 。
- 于是有 \(g_i = C_1(c-1)^{n-1}+C_2(-1)^{n-1}\) ,代入初始条件 \(g_1 = 0\) 与 \(g_2 = (c-1)f_1 = (c-1)c\) ,得 \(C_1 = c-1 = -C_2\)。
- 因此通项公式是 \(g_i = (c-1)^i + (c-1)(-1)^i\) 。
由于最后一个人肯定不能和第一个相同,因为是环状的,所以答案就是 \(g_n\)。
用快速幂处理即可。
时间复杂度 \(O(\log n)\)
空间复杂度 \(O(1)\)
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod = 1e4 + 7;
int qpow(int a, int k) {
ll ans = 1;
while (k) {
if (k & 1) ans = a * ans % mod;
k >>= 1;
a = a * a % mod;
}
return ans;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, c;
cin >> n >> c;
cout << (qpow(c - 1, n) + (c - 1) * qpow(-1, n) + mod) % mod << '\n';
return 0;
}
NC19115 选择颜色的更多相关文章
- H5选择颜色-前端颜色选择器
开发一年多了,一直用angular2框架,框架虽然能大大减少程序员的工作量,但我还是更喜欢用原生的技术写代码. 原生的就像内功心法,框架是招式,招式虽然实用,但是想成为高手还是得有内功修养. 不多说, ...
- 点滴积累【JS】---JS小功能(button选择颜色)
效果: 代码: <head runat="server"> <title></title> <style type="text/ ...
- 基于jquery封装的颜色下拉选择框
应同事要求,花了半个小时,写了一个简单的选择颜色的下拉框控件,可以控制输入框指示结果颜色 也贴出来,说不定哪天有用 if (typeof jQuery === 'undefined') { throw ...
- MFC之向导页、消息框、文件选择、字体、颜色(三)
属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面.另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击“ ...
- 仿淘宝颜色属性选择展示代码(jQuery)
模仿淘宝商品选择颜色和尺寸的效果,即选择商品颜色和尺寸的时候,把选择的颜色和尺寸放到一个页面容器里面,不足之处,还望指教. <!DOCTYPE HTML> <html lang=&q ...
- OpenGL学习--------颜色的选择
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式.无论哪种颜色模式,计算机都必须为每一个像素保存一些数据.不同的是,RGBA模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表的是 ...
- js实现商品颜色尺码联动以及购买数量的选择
<script type="text/javascript"> $(function(){ //初始化点击第一个颜色 jquery $("#colors a: ...
- PyQt4 颜色选择,字体选择代码
# -*- coding: utf-8 -*- """ ------------------------------------------------- File Na ...
- 设置PyCharm中选择文本的背景颜色和代码中和选中单词相同单词的背景颜色
1 设置选中单词的背景颜色 首先进入File->Setting->Editor->Color Scheme后复制一个存在的颜色主题作为自定义的颜色主题(默认的颜色主题是无法修改的,也 ...
随机推荐
- xss攻击和防御
简介 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允 ...
- mmdetection 绘制PR曲线
参考:https://github.com/xuhuasheng/mmdetection_plot_pr_curve 适用于COCO数据集 import os import mmcv import n ...
- 研讨会回放视频:如何提升Jenkins能力,使其成为真正的DevOps平台
"如何实现集中管理.灵活高效的CI/CD"在线研讨会精彩分享 演讲嘉宾:杨海涛 在2022年3月29日举办的"如何实现集中管理.灵活高效的CI/CD"在线研讨会 ...
- 电脑UEFI启动是什么?
UEFI 当EFI发展到1.1的时候,英特尔决定把EFI公之于众,于是后续的2.0吸引了众多公司加入,EFI也不再属于英特尔,而是属于了Unified EFI Form的国际组织,EFI在2.0后也遂 ...
- python爬取豆瓣电影Top250(附完整源代码)
初学爬虫,学习一下三方库的使用以及简单静态网页的分析.就跟着视频写了一个爬取豆瓣Top250排行榜的爬虫. 网页分析 我个人感觉写爬虫最重要的就是分析网页,找到网页的规律,找到自己需要内容所在的地方, ...
- PHP反序列化链分析
前言 基本的魔术方法和反序列化漏洞原理这里就不展开了. 给出一些魔术方法的触发条件: __construct()当一个对象创建(new)时被调用,但在unserialize()时是不会自动调用的 __ ...
- jQuery操作标签,jQuery事件操作,jQuery动画效果,前端框架
jQuery操作标签 jQuery代码查找标签绑定的变量名推荐使用 $xxxEle 样式类操作 addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类 ...
- hashlib加密模块和logging模块,购物车项目
hashlib加密模块 简介 hashlib模块是一个提供了字符串加密功能的模块,包含MD5和SHA的加密算法.具体的加密支持有: MD5,sha1,sha224,sha256, sha384, sh ...
- WSL2-CentOS7固定IP
WSL2-CentOS7固定IP WSL2 采用 Hyper-V 的 Internal Virtual Switch,这个虚拟交换机本身是可以设置静态 IP 地址的,但是 WSL2 却自作聪明,在每次 ...
- Spring 源码(16)Spring Bean的创建过程(7)属性填充
知识回顾 上一篇介绍了Spring中三级缓存的singletonObjects.earlySingletonObjects.singletonFactories,Spring在处理循环依赖时在实例化后 ...