蓝桥杯 2015 省赛 9 垒骰子

第六届蓝桥杯【省赛试题9】垒骰子 ( 矩阵快速幂 ) 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。  经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。  假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。  atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰 阅读详情

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。
经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!
我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。
假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。
atm想计算一下有多少种不同的可能的垒骰子方式。
两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。
由于方案数可能过多,请输出模 10^9 + 7 的结果。
不要小看了 atm 的骰子数量哦~
「输入格式」
第一行两个整数 n m
n表示骰子数目
接下来 m 行,每行两个整数 a b ,表示 a 和 b 数字不能紧贴在一起。
「输出格式」
一行一个数,表示答案模 10^9 + 7 的结果。
「样例输入」
2 1
1 2
「样例输出」
544
「数据范围」
对于 30% 的数据:n <= 5
对于 60% 的数据:n <= 100
对于 100% 的数据:0 < n <= 10^9, m <= 36
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 2000ms

首先直接DP,可以得60分

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1000000007;
list<ll> g[7];
ll dp[1000][6] = {0};
ll p(ll x)
{
	if (x <= 3) return x + 3;
	return x - 3;
}
ll power(ll a, ll b)
{
	ll ans = 1;
	for (int i = 0; i < b; i++)
		ans = ans * a % MOD;
	return ans;

}
int main()
{
	//freopen("in.txt", "r", stdin);
	int n, m;
	scanf("%d%d", &n, &m);
	for (ll i = 1; i <= 6; i++) {
		for (ll j = 1; j <= 6; j++) {
			g[i].push_back(j);
		}
	}
	for (ll i = 0; i < m; i++) {
		int a, b;
		scanf("%d%d", &a, &b);
		g[p(a)].remove(b);
		g[p(b)].remove(a);
	}
	for (ll i = 1; i <= 6; i++)
		dp[1][i] = 1;
	for (ll i = 2; i <= n; i++) {
		for (ll j = 1; j <= 6; j++) {
			for (ll k : g[j]) {
				dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
			}
		}
	}
	ll ans = 0;
	for (ll i = 1; i <= 6; i++)
		ans = (ans + dp[n][i]) % MOD;
	cout << ans * power(4, n) % MOD << endl;
}

再使用矩阵快速幂,则可得100分

#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll MAXN = 100;
const ll MOD = 1e9 + 7;
struct Matrix
{
	vector< vector<ll> > a;
	ll n, m;
	Matrix(ll n, ll m) : n(n), m(m)
	{
		a.resize(n);
		for (ll i = 0; i < n; i++) a[i].resize(m);
	}
	void ones()
	{
		for (ll i = 0; i < n; i++)
		for (ll j = 0; j < m; j++)
		a[i][j] = 1;
	}
	void cpy(const Matrix &B)
	{
		n = B.n;
		m = B.m;
		a.resize(n);
		for (ll i = 0; i < n; i++)
		for (ll j = 0; j < m; j++) {
			a[i].resize(m);
			a[i][j] = B.a[i][j] % MOD;
		}
	}
	void multiply(const Matrix &B)
	{
		//if (m != B.n) exit(250);
		Matrix t(n, B.m);
		for (ll i = 0; i < n; i++)
		for (ll j = 0; j < B.m; j++)
		for (ll k = 0; k < m; k++)
			t.a[i][j] = (t.a[i][j] + a[i][k] * B.a[k][j]) % MOD;
		cpy(t);
	}
	void prll()
	{
		for (ll i = 0; i < n; i++) {
			cout << endl;
			for (ll j = 0; j < m; j++)
				cout << ' ' << a[i][j];
		}
	}
	void eye()
	{
		for (ll i = 0; i < n; i++) a[i][i] = 1;
	}
	void power(ll p)
	{
		Matrix res(n, m);
		res.eye();
		Matrix t(n, m);
		t.cpy(*this);
		while (p)
		{
			if (p & 1) res.multiply(t);
			p >>= 1;
			t.multiply(t);
		}
		cpy(res);
	}
};
void solve(ll n)
{
	Matrix a(2, 1);
	a.a[0][0] = 0;
	a.a[1][0] = 1;
	Matrix b(2, 2);
	b.a[0][0] = 1; b.a[0][1] = 1;
	b.a[1][0] = 1; b.a[1][1] = 0;
	b.power(n);
	//b.prll();
	b.multiply(a);
	//cout << b.a[0][0] << endl;
}
int main()
{
	//freopen("in", "r", stdin);
	ll n, m;
	scanf("%lld%lld", &n, &m);
	Matrix B(6, 6);
	B.ones();
	ll p[6] = {3, 4, 5, 0, 1, 2};
	for (ll i = 0; i < m; i++) {
                ll a, b;
                scanf("%lld%lld", &a, &b);
                a--, b--;
                B.a[p[a]][b] = 0;
                B.a[p[b]][a] = 0;
	}
	B.power(n - 1);
	Matrix A(6,1);
	A.ones();
	B.multiply(A);
	ll ans = 0;
	for (ll i = 0; i < 6; i++) {
		ans = (ans + B.a[i][0]) % MOD;
	}
	Matrix C(1, 1);
	C.a[0][0] = 4;
	C.power(n);
	cout << ans * C.a[0][0] % MOD << endl;

}
第六届蓝桥杯省赛试题--垒骰子 解题报告 第六届蓝桥杯省赛试题--叠骰子 解题报告 阅读详情

相关推荐

【每日蓝桥】32、一五年省赛Java组真题“垒骰子”

你好呀,我是灰小猿,一个超会写bug的程序猿! 欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术! 标题:饮料换购 赌圣atm晚年迷恋上了垒骰子,就是吧骰子一个垒在另一个上面,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm发现稳定骰子的奥秘,有些数字的面贴着会互相排斥; 我们先来规范一下骰子,1的对面是4,2的对面是5,3的对面是6. 假设有m组互斥现象,每组中的那两个数字的面

累计发表博客60余万字,优快云 博客专家、Java 领域优质创作者、华为云享专家、阿里云专家博主。专注分享 Java 优质文章,毕设实战项目开发,全网粉丝10W+ 4517

2015年蓝桥杯省赛B组真题 第九题垒骰子

第九题垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。 由于方案数可能过多,请输出模 109+7

xunzhaofupo的博客 438

2015年 第6届 蓝桥杯 Java B组 省赛解析及总结

01 三角形面积 热身 不用编程 02 立方变自身 简单枚举 03 三羊献瑞 简单枚举 小技巧 *04 循环节长度 有坑 逻辑 05 九数组分数 全排列 带分数 06 加法变乘法 简单枚举 小技巧 07 牌型种数 递归 08 饮料换购 模拟 ****09 垒骰子 递归-动规-矩阵快速幂 矩阵乘法、矩阵快速幂 位运算 快速求 i^n 10 生命之树 Java中递归最多1万层

upward 2788

2015年蓝桥杯省赛B组第9题--垒骰子

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。  atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方

程序设计与算法...... 2277

【动态规划 矩阵快速幂】P8624 [蓝桥杯 2015 省 AB] 垒骰子|普及+

## 题目描述 赌圣 atm 晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:$1$ 的对面是 $4$,$2$ 的对面是 $5$,$3$ 的对面是 $6$。 假设有 $m$ 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm 想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相

闻缺陷则喜何志丹 1208

高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割

李国春(接上)

副组长的博客 1714

2015年蓝桥杯省赛B组C/C++(试题+答案分析)

2015年蓝桥杯省赛B组C/C++(试题+答案分析) 第一题 结果填空 (3分) 奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。 请提交该数字(一个整数),...

weixin_44683914的博客 2108

libero烧录信号抓取

提示:如果改了东西需要重新烧录,需要把这两个界面都关闭再libero打开。两个红色的要关闭掉。然后返回libero开始烧录,观测信号(如果只烧录观测从这一步开始就行)等到下面的messige出现以下信息表示run好了。在下图中右侧可以自己设置,设置完之后记得保存一下。run一下,耐心等待,有警告就ok,run完之后。run成功会变绿色,然后点下面的这个看波形。设置抓取信号:在libero打开。打开的就是烧录界面,直接run。

qq_34047965的博客 1423

freopen函数的具体使用和例题购物单(蓝桥杯2017年试题A)

freopen函数和蓝桥杯购物单2017试题A小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。取款机只能提供100元面额的纸币。小明想尽可能少取些现金,够用就行了。你的任务是计算出,小明最少需要取多少现金。以下...

hfeifjeaf的博客 473

手势识别器:实现手部动作识别器

在本篇文章中,我们将使用Python来实现一个简单的手部动作识别器。然后,我们通过循环从摄像头获取每一帧图像,并对每一帧图像进行处理。我们提取手部关键点并计算手势的特征向量,然后将其添加到特征列表和标签列表中。接下来,我们再次从摄像头获取每一帧图像,并进行手势识别。我们提取手部关键点并计算手势的特征向量,然后使用训练好的分类器来预测手势,并在图像上显示出来。在这个实现中,我们将使用MediaPipe库来检测和跟踪手部关键点,然后使用K最近邻(K-Nearest Neighbors)算法对手势进行分类。

BitSlinger的博客 239

谷歌A2A协议入门指南:附简易Python代码示例

继"关税"之后,当下最热门的词汇当属AI智能体——这种基于人工智能的软件能够执行复杂任务、实现工作流自动化并提升生产效率。但迄今为止,大多数智能体都处于各自为政的状态,难以顺畅协作。就像团队执行重大项目时,成员之间却无法交流!对于技术人员而言,一个可能遇到的典型场景是:假设你需要协调四个不同的AI服务——处理用户查询的Gemini智能体、在向量数据库进行搜索的AI应用、基于Claude的摘要生成器,以及运行专业领域逻辑的Python智能体。

独立开发,substack顶级编辑 799

蓝桥杯练习系统如何正确提交试题(java,c#,c++)

第一步: 首先打开“蓝桥杯”练习系统官网登录自己的账号,没有账号的进行注册 个人用户注册 选择相应的角色进行登录 完成登录后点击试题集 选择相应的试题点击进入——>点击提交试题 然后跳转到提交试题上 把自己在编辑器上的代码复制到“代码:”中,下图以java代码为例: 切记 public class后边应为Main 否则会出现错误 切记 public class后边应为Main 否则会出现错误 切记 public class后边应为Main 否则会出现错误 重要的...

super大雄的博客 1万+

【华为OD技术面试真题 - 技术面】- python面试题(1)

华为OD面试技术面准备指南 华为OD面试技术面常见问题解答 华为OD面试技术面经验分享 华为OD面试技术面注意事项 华为OD面试技术面攻略 华为OD面试技术面模拟题目与解析 华为OD面试技术面知识点梳理 华为OD面试技术面常考

算法大师! 5536

P8624 [蓝桥杯 2015 省 AB] 垒骰子【 矩阵快速幂】

赌圣 atm 晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!1的对面是42的对面是53的对面是6。假设有m组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。atm 想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多,请输出模1097的结果。

海岛Blog 329

RK3588开发笔记-ES8311音频芯片调试记录

本篇博客主要记录如何在RK3588平台试ES8311音频芯片的过程。这包括硬件连接、内核配置、驱动程序调试和测试步骤。通过以上步骤,我们成功在RK3588平台上调试了ES8311音频芯片。这包括硬件连接、内核配置、设备树配置、驱动加载以及音频测试。希望这篇调试记录能为其他开发者提供一些帮助。如果你有任何问题或建议,欢迎留言讨上调论。

flypig has a dream! 3163

SAP-ABAP:SAP系统调优利器:RZ11动态参数修改全指南

SAP系统调优利器:RZ11动态参数修改全指南

baidu_35680696的博客 970

dp加矩阵快速幂,蓝桥杯/2015/初赛(省赛)/C语言A组/9/垒骰子

先关注下斐波那契数列 f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2),对n,求f(n) 这是一个递推公式,dp的递推公式也是递推公式 O(n)暴力求解 但可以将递推公式转换成矩阵运算再加快速幂来达到O(logn)的加速。 \[ \begin{equation} \begin{bmatrix} f(n) \\ f(n-1) \end{bma...

aigu4729的博客 217

uboot引导vxworks6.9(T4240) 启动

vxworks内核配置下搜索RAM_LOW_ADRS, 值为0x01000000, 是vxworks下载启动的地址,uboot启动时会用到。vxworks6.9 t4240用的是32地址空间,uboot下用的是64位地址空间,去uboot下修改law物理地址空间为32位。vxworks下flash基地址为 0xff000000, 将vx下的地址修改为0xe0000000,和uboot下地址一致。uboot下flash基地址为0xe000000,vxworks内核配置为build-in 符号表。

珂珂可爱多 3236

2015年第六届蓝桥杯C/C++程序设计本科B组省赛 垒骰子(编程大题)

垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。

A place to record sth. 5796

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[蓝桥杯 2015 省 AB] 垒骰子

赌圣 atm 晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!1的对面是42的对面是53的对面是6。假设有m组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。atm 想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多,请输出模1097的结果。

m0_60738889的博客 1212

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2015蓝桥杯省赛C/C++ 垒骰子 两种思路讨论

2015蓝桥杯省赛C/C++ 垒骰子 两种思路讨论 好久没写博客了,上次写好像还是上一届蓝桥杯… 话不多说,我们先上题。 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方

weixin_45783661的博客 1051

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝桥杯省赛真题2015年第六届Java本科B组第09题——垒骰子

蓝桥杯省赛真题2015年第六届Java本科B组第09题——垒骰子

影龙武的博客qq_43594119 617

[蓝桥杯]垒骰子

​ 垒骰子 题目描述 赌圣 atm 晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 mm 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm 想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。 由于方案数可

qq_2937655951的博客 825

垒骰子

垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方式相...

xd-cy的博客 1292

2015年第六届蓝桥杯JavaB组省赛真题详解

2015第六届蓝桥杯JavaB组省赛真题详解 第一题:三角形面积 题目描述: 如图1所示。图中的所有小方格面积都是1。 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积。不要填写任何多余内容或说明性文字。 public class Main{ public static void main(String[] args) { System.out.println(6...

hyx153183740的博客 4111
上一篇: POJ 3070 Fibonacci
下一篇: 蓝桥杯 2012 3 拼音字母
yaoyuan-yy
博客等级 码龄11年 38粉丝 582原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值