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. 2021.08.03 P1197 星球大战(并查集)

    2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...

  2. what 的页面制作

    1. html结构 <!-- section: what we do --> <section id="what" class="bg-light py ...

  3. 通过Nginx TCP反向代理实现Apache Doris负载均衡

    概述 Nginx能够实现HTTP.HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡.那么,问题来了,可不可以通过Nginx实现Apache Doris数据库的负载均衡呢?答案是:可以.接下来, ...

  4. C# 滑动验证码|拼图验证|SlideCaptcha

    使用背景: 关于滑动验证码的使用场所还是非常多的,如: 调取短信接口之前,和 注册请求之前 或者 频繁会调用的接口 都需要加这个拼图验证.这里先上一下效果图吧(心中无码,自然高清). 话不多说,开撸! ...

  5. Java基础语法Day_04

    第11节 开发工具-IDEA day04_01_集成开发环境IDE的概述 day04_02_IntelliJ-IDEA的安装 day04_03_IDEA的项目结构 day04_04_IDEA的Hell ...

  6. 配置Docker镜像源为国内镜像源

    镜像加速 /etc/docker/daemon.json 没有这个文件 创建这个文件 vi /etc/docker/daemon.json 按 i 进行插入 { "registry-mirr ...

  7. 从零开始学YC-Framework之初步

    本文主要内容为如下几个方面? YC-Framework的取名出于什么考虑? YC-Framework的特点有哪些? YC-Framework的模块由哪些组成? 为什么要开发YC-Framework? ...

  8. Golang 实现 Redis(10): 本地原子性事务

    为了支持多个命令的原子性执行 Redis 提供了事务机制. Redis 官方文档中称事务带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中 ...

  9. [笔记] Powerful Number 筛

    定义 Powerful Number(以下简称 PN)筛类似于杜教筛,可以拿来求一些积性函数的前缀和. 要求: 假设现在要求积性函数 \(f\) 的前缀和 \(F(n)=\sum_{i=1}^nf(i ...

  10. Fuzzing101系列 Exercise 1 - Xpdf

    序言 Fuzzing101系列包含针对10 个真实目标的10个练习,在练习中一步一步学习Fuzzing技术的知识. 模糊测试(Fuzzing/Fuzz)是一种自动化软件测试技术,它基于为程序提供随机或 ...