上海市计算机学会竞赛平台2023年2月月赛丙组圆环三染色

news/2024/7/16 5:33:33 标签: 算法
题目描述

有一个圆环上有 𝑛n 个点,一个染色方案需要为每个点分配三种颜色中的一种,且圆环上相邻的点颜色不能相同。

请求出有多少种染色方案。答案可能很大,输出模 1,000,000,0071,000,000,007 的余数。

输入格式
  • 单个整数表示 𝑛n。
输出格式
  • 表示方案数模 1,000,000,0071,000,000,007 的余数。
数据范围
  • 对于 30%30% 的数据,1≤𝑛≤201≤n≤20;
  • 对于 60%60% 的数据,1≤𝑛≤1,000,0001≤n≤1,000,000;
  • 对于 100%100% 的数据,1≤𝑛≤10181≤n≤1018
样例数据

输入:

1

输出:

3

输入:

3

输出:

6

详见代码:

#include<iostream>
#include<cstdio>
using namespace std;
const long long p=1000000007ll;
long long n;
struct Matrix
{
	long long a[4][4];
	void set1()
	{
		for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
		a[i][j]=(i==j);
		return ;
	}
	void set0()
	{
		for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
		a[i][j]=0ll;
		return ;
	}
	void modp()
	{
		for(int i=1;i<=3;i++)
		for(int j=1;j<=3;j++)
		a[i][j]%=p;
		return ;
	}
}mi;
Matrix operator *(const Matrix &as,const Matrix &bs)
{
	Matrix rt;
	rt.set0();
	for(int k=1;k<=3;k++)
	for(int i=1;i<=3;i++)
	for(int j=1;j<=3;j++)
	rt.a[i][j]+=as.a[i][k]*bs.a[k][j]%p;
	rt.modp();
	return rt;
}
Matrix qpw(Matrix as,long long bs)
{
	Matrix rt;
	rt.set1();
	while(bs)
	{
		if(bs&1)
		rt=rt*as;
		as=as*as;
		bs>>=1;
	}
	return rt;
}
int main()
{
	scanf("%lld",&n);
	if(n==1)
	{
		printf("%lld\n",3ll);
		return 0;
	}
	Matrix mInit,mTran;
	mInit.set0();
	mTran.set0();
	mInit.a[1][1]=1ll;
	for(int i=1;i<=3;i++)
	for(int j=1;j<=3;j++)
	if(i!=j)
	mTran.a[i][j]=1ll;
	mInit=mInit*qpw(mTran,n-1ll);
	printf("%lld\n",((3*mInit.a[1][2]+3*mInit.a[1][3])%p+p)%p);
	return 0;
}


http://www.niftyadmin.cn/n/5535594.html

相关文章

深入Java腹地:序列化与反序列化的奥秘探索

在Java的广阔天地中&#xff0c;序列化与反序列化机制如同桥梁&#xff0c;连接着程序运行时的对象状态与持久化存储或网络传输之间的鸿沟。它们不仅是Java对象持久化、网络通信以及远程方法调用&#xff08;RMI&#xff09;等关键技术的基础&#xff0c;也是理解Java语言深层次…

MySQL之备份与恢复(三)

备份与恢复 逻辑备份还是物理备份 物理备份 物理备份有如下好处: 1.基于文件的物理备份&#xff0c;只需要将需要的文件复制到其他地方即可完成备份。不需要其他额外的工作来生成原始文件。2.物理备份的恢复可能就更简单了&#xff0c;这取决于存储引擎。对于MyISAM&#x…

【MySQL备份】mysqldump基础篇

目录 1.简介 2.基本用途 3.命令格式 3.1常用选项 3.2常用命令 4.备份脚本 5.定时执行备份脚本 1.简介 mysqldump 是 MySQL 数据库管理系统的命令行实用程序&#xff0c;用于创建数据库的逻辑备份。它能够导出数据库的结构&#xff08;如表结构、视图、触发器等&#xf…

Spring MVC 中 使用 RESTFul 实现用户管理系统

1. Spring MVC 中 使用 RESTFul 实现用户管理系统 文章目录 1. Spring MVC 中 使用 RESTFul 实现用户管理系统2. 静态页面准备2.1 user.css2.2 user_index.html2.3 user_list.html2.4 user_add.html2.5 user_edit.html 3. SpringMVC环境搭建3.1 创建module&#xff1a;usermgt3…

【chatgpt】 PyTorch中dtype属性,表示张量的数据类型

在 PyTorch 中&#xff0c;dtype 是一个属性&#xff0c;用于表示张量的数据类型。dtype&#xff08;数据类型&#xff09;决定了张量中元素的存储方式和计算方法。 常见的数据类型 PyTorch 支持多种数据类型&#xff0c;常见的数据类型包括&#xff1a; torch.float32 或 t…

MongoDB的核心点是什么,选择是否使用!

MongoDB概述 定义: MongoDB是一个文档数据库&#xff0c;设计目的在于简化应用程序的开发和扩展。起源: 由DoubleClick创始人Dwight Merriman和Kevin O’Connor于2007年启动&#xff0c;以应对大规模流量需求。 MongoDB发展历程 开发背景: 由于关系型数据库无法满足DoubleCl…

网络协议 -- IP、ICMP、TCP、UDP字段解析

网络协议报文解析及工具使用介绍 1. 以太网帧格式及各字段作用 -------------------------------- | Destination MAC Address (48 bits) | -------------------------------- | Source MAC Address (48 bits) …

字节码编程ASM之生成变量并sout

写在前面 本文看下如何通过asm生成变量并sout。 1&#xff1a;代码 直接看代码吧&#xff0c;注释很详细&#xff0c;有不懂的&#xff0c;留言告诉我&#xff1a; package com.dahuyuo.asmtest;import org.objectweb.asm.*; import org.objectweb.asm.commons.AdviceAdapt…