蓝桥杯---垒骰子

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

两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多,请输出模 10^9+7的结果。不要小看了 atm的骰子数量哦~

[输入格式]
第一行两个整数 n m
 接下来 :n表示骰子数目
                m 行,每行两个整数ab,表示 a 和b 不能紧贴在一起。

[输出格式]
一行一个数,表示答案模 10^9+7的结果。

[样例输入]
2 1

1 2

[样例输出]
544

[数据范围]
对于 30% 的数据:n <= 5
对于 60% 的数据:n <= 100
对于 100% 的数据:0 <n <= 10^9,m <= 36

思路:暴力递归、动态规划

代码

public class _09垒骰子 {
    static int op[] = new int [7];
    private static int n;
    private static int m;
    private static final long MOO=1000000007;

    static void init(){
        op[1] = 4;
        op[4] = 1;
        op[2] = 5;
        op[5] = 2;
        op[3] = 6;
        op[6] = 3;
    }
    public static void main(String[] args) {
        init();
        Scanner input = new Scanner(System.in);
        n = input.nextInt();
        m = input.nextInt();
        long conflict[][] = new long[6][6];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                conflict[i][j] = 1;
            }
        }

//        建立冲突矩阵
        for (int i = 0; i < m; i++) {
            int a = input.nextInt();
            int b = input.nextInt();
            conflict[op[a-1]][b-1] = 0;
            conflict[op[b-1]][a-1] = 0;
        }
//        求冲突矩阵的n-1次方
        long[][] nPow_n_1 = mPow(conflict,n-1);
        //            累加矩阵的每个元素
        long ans = 0;
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                ans = (ans + nPow_n_1[i][j])%MOO;
            }
        }
//            ans*4^n
        System.out.println(ans * power(4,n)%MOO);
    }
    private static long power(long i,int n){
        int ans = 1;
        while(n != 0){
            if((n & 1) ==1){
                ans *= (ans * i)%MOO;
            }
            i = i*i%MOO;
            n >>= 1;
        }
        return ans;
    }
//    矩阵的快速幂
    private static long[][] mPow(long[][] conflict,int n){
        long[][] e = new long[6][6];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if(i == j){
                    e[i][j] = 1;
                }else{
                    e[i][j] = 0;
                }
            }
        }
        while (n != 0){
            if((n & 1) == 1){
                e = mMul(e,conflict);
            }
            conflict = mMul(conflict,conflict);
            n >>= 1;
        }
        return e;
    }
    private static long[][] mMul(long[][] a ,long[][] b){
        long[][] ans = new long[6][6];
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                for (int k = 0; k < 6; k++) {
                    ans[i][j] = (ans[i][j]+a[i][k] * b[k][j])%MOO;
                }
            }
        }
        return ans;
    }
}

 效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/367597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue2+ElementUI 弹窗全局拖拽 支持放大缩小

拖拽组件 dialogDrag.vue <template><div></div> </template> <script>export default {name: dialogDrag,data() {return {originalWidth: null,originalHeight: null}},created() {this.$nextTick(()>{this.dialogDrag()})},mounted() {}…

vue3 之 组合式API—computed

computed计算属性函数 计算属性基本思想和Vue2的完全一致&#xff0c;组合式API下的计算属性只是修改了写法 核心步骤&#xff1a; 导入computed函数执行函数 在回调参数中return基于响应式数据做计算的值&#xff0c;用变量接收 vue <script setup> // 1.导入compute…

【数据结构】链表OJ面试题(题库+解析)

前言 还不清楚链表的码喵们可以看看前篇关于链表的详解 http://t.csdnimg.cn/X6t6P 1.链表面试题 既然已经懂得了链表该如何实现&#xff0c;那么现在就趁热打铁开始练习&#xff01;这里给码喵们整理了相对不错的一些OJ题来练习 1. 删除链表中等于给定值 val 的所有结点。 力…

代码随想录 Leetcode78. 子集

题目&#xff1a; 代码(首刷看解析 2024年2月3日&#xff09;&#xff1a; class Solution { private:vector<vector<int>> res;vector<int> path; public:void backtracking(vector<int>& nums, int startIndex) {res.push_back(path);for (int …

RocketMQ问题篇01 | NameServer告警异常分析

RocketMQ问题篇01 | NameServer告警异常分析 1、问题描述2、初步分析2.1 mqcloud源代码分析2.2 NameServer源码分析2.3 NameServer源码分析2&#xff08;源码出错概率太低&#xff09;2.4 大流量分析 3、堆栈分析3.1 wait response on the channel3.2 connect to failed3.3 sen…

Catalan数

文章目录 Catalan数Leecode96 不同的二叉搜索树题目描述解题思路代码 Leecode22 括号生成题目描述代码 Catalan数 Catalan数是一种组合数学的计数方法&#xff0c;常用于解决一些计数问题&#xff0c;例如括号匹配问题、二叉树的节点问题等。Catalan数的计算公式如下&#xff1…

20240203在Ubuntu20.04.6下配置stable-diffusion-webui.git

20240203在Ubuntu20.04.6下配置stable-diffusion-webui.git 2024/2/3 11:55 【结论&#xff1a;在Ubuntu20.04.6下&#xff0c;生成512x512分辨率的图像&#xff0c;大概需要11秒钟&#xff01;】 前提条件&#xff0c;可以通过技术手段上外网&#xff01;^_首先你要有一张NVID…

servlet会话API

servlet会话API 您可以使用servlet会话API中定义的类和接口来创建和管理用户会话。servlet会话API提供的用于创建和管理用户会话的各种接口有javax.servlet.http.HttpSession、javax.servlet.httpSessionListener和javax.servlet.http.HttpSessionBindingListener和javax.serv…

python爬虫4

#1.练习 # &#xff08;1&#xff09; 获取网页的源码 # &#xff08;2&#xff09; 解析 解析的服务器响应的文件 etree.HTML # (3) 打印 import urllib.request urlhttps://www.baidu.com/ headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…

Dockerfile构建Nginx访问说明

Dockerfile使用情况 20210903 Dockerfile ,Nginx 参考地址&#xff1a;https://yeasy.gitbook.io/docker_practice/image/build 编写简单Dockerfile 在一个空白目录中&#xff0c;建立一个文本文件&#xff0c;并命名为 Dockerfile&#xff1a; $ mkdir mynginx $ cd myngin…

Swift 入门之自定义类型的模式匹配(Pattern Matching)

概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样&#xff0c;在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中&#xff0c;模式匹配&#xff08;Pattern …

【第二十二课】最短路:bellman_ford / spfa算法 (acwing-851 / acwing-853 / c++代码)

目录 前言 acwing-853 bellman_ford算法的思想 代码如下 一些解释 acwing-851 spfa算法思想 代码如下 一些解释 前言 由于权重可以表示不同的度量&#xff0c;例如距离、时间、费用等&#xff0c;具体取决于问题的背景&#xff0c;因此会存在一些权值为负数的题目。…

springboot并mybatis入门启动

pom.xml,需要留意jdk的版本&#xff08;11&#xff09;和springboot版本要匹配&#xff08;2.7.4&#xff09;&#xff0c;然后还要注意mybatis启动l类的版本&#xff08;2.2.2&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xm…

Visual Studio 2022 查看类关系图

这里写自定义目录标题 右键要查看的项目 -“查看”-“查看类图”效果展示&#xff1a; 原文地址 www.cnblogs.com 步骤1&#xff1a;勾选扩展开发 步骤2: 勾选类设计器 右键要查看的项目 -“查看”-“查看类图” 效果展示&#xff1a;

【Uni-App】运行微信小程序时报错routeDone with a webviewId 2 that is not the current page

使用HBuilderX开发微信小程序&#xff0c;运行项目的时有可能会出现routeDone with a webviewId 1 that is not the current page的报错&#xff0c;但不影响运行。如果强迫症介意的话&#xff0c;可以考下面的方法进行修复。 产生原因 由于微信开发者工具的调试基础库处于灰度…

[python]基于Ultra-Fast-Lane-Detection-v2车道线实时检测onnx部署

【论文地址】 https://arxiv.org/pdf/2206.07389.pdf 【框架地址】 https://github.com/cfzd/Ultra-Fast-Lane-Detection-v2 【框架介绍】 Ultra-Fast-Lane-Detection-v2&#xff08;UFL-D-v2&#xff09;算法是一种高效的车道线检测算法&#xff0c;它旨在快速准确地识别…

常见关系型数据库产品介绍

更新晚了&#xff0c;不好意思啦&#xff01;继关系型数据库的介绍与历史今天主要和大家分享关系型数据库有哪些产品以及简单的背景介绍。这篇文章介意宝宝们听着舒缓的音乐静静享受。 关系型数据库的产品有很多&#xff0c;下面和大家分享一些比较有名的、使用比较广泛的关系…

HP惠普暗影精灵8P笔记本OMEN Gaming Laptop 16-n0076AX原厂Win11系统镜像恢复出厂预装OEM系统

原装Windows11系统安装包&#xff0c;适用型号(HP暗影8plus笔记本电脑)&#xff1a; 16-n0000AX、16-n0001AX、16-n0002AX、16-n0003AX、16-n0004AX、16-n0005AX 16-n0016AX、16-n0058AX、16-n0059AX、16-n0076AX、16-n0078AX等 链接&#xff1a;https://pan.baidu.com/s/1G…

Javaweb之SpringBootWeb案例之yml配置文件的详细解析

4.2 yml配置文件 前面我们一直使用springboot项目创建完毕后自带的application.properties进行属性的配置&#xff0c;那其实呢&#xff0c;在springboot项目当中是支持多种配置方式的&#xff0c;除了支持properties配置文件以外&#xff0c;还支持另外一种类型的配置文件&am…

HTMLCSS JavaScript 基础

HTML复杂建立骨架。 CSS复杂装修。 JS负责定义行为和交互。 示例功能&#xff0c;点击按钮&#xff0c;数量增加&#xff0c;图片交互显示。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"…