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}\) ,随后解递推:

  1. 二阶线性递推方程的特征方程是 \(x^2 = px+q\) ,即 \(x^2 = (c-2)x + (c-1)\) ,解得 \(x = c-1 \ or\ -1\) 。
  2. 于是有 \(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\)。
  3. 因此通项公式是 \(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 选择颜色的更多相关文章

  1. H5选择颜色-前端颜色选择器

    开发一年多了,一直用angular2框架,框架虽然能大大减少程序员的工作量,但我还是更喜欢用原生的技术写代码. 原生的就像内功心法,框架是招式,招式虽然实用,但是想成为高手还是得有内功修养. 不多说, ...

  2. 点滴积累【JS】---JS小功能(button选择颜色)

    效果: 代码: <head runat="server"> <title></title> <style type="text/ ...

  3. 基于jquery封装的颜色下拉选择框

    应同事要求,花了半个小时,写了一个简单的选择颜色的下拉框控件,可以控制输入框指示结果颜色 也贴出来,说不定哪天有用 if (typeof jQuery === 'undefined') { throw ...

  4. MFC之向导页、消息框、文件选择、字体、颜色(三)

    属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面.另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框,它通过点击“ ...

  5. 仿淘宝颜色属性选择展示代码(jQuery)

    模仿淘宝商品选择颜色和尺寸的效果,即选择商品颜色和尺寸的时候,把选择的颜色和尺寸放到一个页面容器里面,不足之处,还望指教. <!DOCTYPE HTML> <html lang=&q ...

  6. OpenGL学习--------颜色的选择

    OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式.无论哪种颜色模式,计算机都必须为每一个像素保存一些数据.不同的是,RGBA模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表的是 ...

  7. js实现商品颜色尺码联动以及购买数量的选择

    <script type="text/javascript"> $(function(){ //初始化点击第一个颜色 jquery $("#colors a: ...

  8. PyQt4 颜色选择,字体选择代码

    # -*- coding: utf-8 -*- """ ------------------------------------------------- File Na ...

  9. 设置PyCharm中选择文本的背景颜色和代码中和选中单词相同单词的背景颜色

    1 设置选中单词的背景颜色 首先进入File->Setting->Editor->Color Scheme后复制一个存在的颜色主题作为自定义的颜色主题(默认的颜色主题是无法修改的,也 ...

随机推荐

  1. nodejs的TCP相关的一些笔记

    TCP协议 基于nodejs创建TCP服务端 TCP服务的事件 TCP报文解析与粘包解决方案 一.TCP协议 1.1TCP协议原理部分参考:无连接运输的UDP.可靠数据传输原理.面向连接运输的TCP ...

  2. 项目完成 - 基于Django3.x版本 - 开发部署小结

    前言 最近因为政企部门的工作失误,导致我们的项目差点挂掉,客户意见很大,然后我们只能被动进入007加班状态,忙得嗷嗷叫,直到今天才勉强把项目改完交付,是时候写一个小结. 技术 因为前期需求不明确,数据 ...

  3. [AcWing 800] 数组元素的目标和

    点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], b[N]; int mai ...

  4. 【面试普通人VS高手系列】volatile关键字有什么用?它的实现原理是什么?

    一个工作了6年的Java程序员,在阿里二面,被问到"volatile"关键字. 然后,就没有然后了- 同样,另外一个去美团面试的工作4年的小伙伴,也被"volatile关 ...

  5. 【Istio实际操作篇】Istio入门,10分钟快速安装

    @ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...

  6. 一文带你速懂虚拟化KVM和XEN

    来源 :蛋蛋团 前言 "云计算"这个技术经过十余年的普及到如今已经可以称得上是家喻户晓了,基于云计算平台,在多个领域内创造了一个又一个的记录:电子商务里亿万人同时在线抢购的的&qu ...

  7. selenium模块使用详解、打码平台使用、xpath使用、使用selenium爬取京东商品信息、scrapy框架介绍与安装

    今日内容概要 selenium的使用 打码平台使用 xpath使用 爬取京东商品信息 scrapy 介绍和安装 内容详细 1.selenium模块的使用 # 之前咱们学requests,可以发送htt ...

  8. Unity-Adressable打包热更

    Addressable是Unity推出的打ab包方案,自动依赖: 不需要手动写AB打包方案,不需要关心依赖; 提供本地远程服务异步加载: 打包粒度可调节: 1.Group Addressable打包需 ...

  9. 流量治理神器-Sentinel 究竟是怎么做到让业务方接入简单?

    大家好,我是架构摆渡人,这是流量治理系列的第10篇原创文章,如果有收获,还请分享给更多的朋友. 做业务开发,需要考虑业务的扩展性.做基础框架开发,需要考虑如何让业务方接入,使用简单,尽量不要耦合在业务 ...

  10. 在Windows2003 server 64位系统上使用ArcEngine开发的WCF服务

    之前大篇文章提到,ESRI说AE10.0以后已经不支持WebService的发布,经过一段时间的测试,发现目前10.2.2版本开始的WCF服务都可以正常发布,且运行正常. 先说一下之前遇到的问题,本机 ...