首页 > 其他分享 >P8624 [蓝桥杯 2015 省 AB] 垒骰子

P8624 [蓝桥杯 2015 省 AB] 垒骰子

时间:2023-12-06 22:24:21浏览次数:31  
标签:骰子 AB int 蓝桥 P8624 include op

这道题的数据范围比较突出:

1<=N<=1e9

先写一个O(N)算法:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;

const int mod = 1e9 + 7;

int n, m, g[8][8], f[8], op[8], bf[8];



signed main()
{
    op[1] = 4;
    op[4] = 1;
    op[2] = 5;
    op[5] = 2;
    op[3] = 6;
    op[6] = 3;
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int x, y;
        cin >> x >> y;
        g[x][y] = g[y][x] = 1;
    }
    for(int i = 1; i <= 6; i++)
        f[i] = 4;
    for (int i = 2; i <= n; i++)
    {
        memcpy(bf, f, sizeof(f));
        for (int j = 1; j <= 6; j++)
        {
            int op_j = op[j], tmp = 0;
            for(int k = 1; k <= 6; k++)
            {
                int p = (1 - g[op_j][k]) * 4;
                tmp = (tmp + p * bf[k]) % mod;
                f[j] = tmp;
            }
        }
    }
    int ans = 0;
    for(int i = 1; i <= 6; i++)
        ans = (ans + f[i]) % mod;
    cout << ans << endl;
    system("pause");
    return 0;
}

f[i][j]表示:高度为i层,且最顶上的骰子数字j朝上的方案数。

一开始受到ACwing中用spfa算法求右边数限制的最短路那道题的影响,陷入了定势思维,

把dp的转移方程写成了

for (int i = 2; i <= n; i++)
    {
        memcpy(bf, f, sizeof(f));
        for (int j = 1; j <= 6; j++)
        {
            int op_j = op[j];
            int &tmp = f[j];
            for(int k = 1; k <= 6; k++)
            {
                int p = (1 - g[op_j][k]) * 4;
                tmp = (tmp + p * bf[k]) % mod;
            }
        }
    }

仔细观察就能发现,这样子会导致f[j]被多次累加更新,导致计算值远大于实际值。

(如果用的是二维数组这么写没有问题,但这道题因为省掉了一维数组,所以必须要借助一个临时变量)

标签:骰子,AB,int,蓝桥,P8624,include,op
From: https://www.cnblogs.com/smartljy/p/17880082.html

相关文章

  • SQL ALTER TABLE 语句- 灵活修改表结构和数据类型
    SQLALTERTABLE语句SQLALTERTABLE语句用于在现有表中添加、删除或修改列,也可用于添加和删除各种约束。ALTERTABLE-添加列要在表中添加列,请使用以下语法:ALTERTABLE表名ADD列名数据类型;以下SQL向"Customers"表添加了一个"Email"列:ALTERTABLECustomers......
  • buuctf 加固题 babypython WriteUp
    原题wp参考链接:https://www.cnblogs.com/karsa/p/13529769.html这是CISCN2021总决赛的题,解题思路是软链接zip读取文件,然后伪造admin的session读取flag回到buuctf的这个题:ssh连上去,查看文件/app/y0u_found_it/y0u_found_it_main.py关键代码:random.seed(uuid.getnode())a......
  • Databend 如何利用 GPT-4 进行质量保证
    背景在数据库行业,质量是核心要素。Databend的应用场景广泛,特别是在金融相关领域,其查询结果的准确性对用户至关重要。因此,在快速迭代的过程中,如何确保产品质量,成为我们面临的重大挑战。随着Databend开源社区的快速发展,新功能的持续增加和现有功能的优化提出了新的测试挑战。......
  • Spring MVC 源码 - HandlerAdapter 组件(二)之 ServletInvocableHandlerMethod
    HandlerAdapter组件HandlerAdapter组件,处理器的适配器。因为处理器handler的类型是Object类型,需要有一个调用者来实现handler是怎么被执行。Spring中的处理器的实现多变,比如用户的处理器可以实现Controller接口或者HttpRequestHandler接口,也可以用@RequestMapping注......
  • Erlang&Rabbitmq安装
    一.安装erlang1wgethttp://www.erlang.org/download/otp_src_19.3.tar.gz解压1tar-xvfotp_src_19.3.tar.gz进入文件夹1cdotp_src_19.3配置1./configure--prefix=/home/erlang--without-javac如果报错:1configure:error:Nocurseslibraryfunct......
  • Rabbitmq队列
    rabbitmq消息中间件-消息队列异步开发语言erlang爱立信公司1.安装pythonrabbitMQmodule 1pip3installpika关闭防火墙1serviceiptablesstop关闭防火墙2.实现最简单的队列通信send端:1#send端2importpika34credentials=pika.PlainCredent......
  • 十一、RabbitMQ集群
    一、clustering1、使用集群的原因2、搭建步骤2.1搭建架构图2.2操作步骤2.3实战部分操作演示二、镜像队列1、使用镜像的原因2、搭建步骤2.1操作步骤2.2实战步骤三、Haproxy+Keepalive实现高可用负载均衡1、整体架构图2、Haproxy实现负载均......
  • 十、RabbitMQ其他知识点
    一、幂等性1、概念2、消息重复消费3、解决思路4、消费端的幂等性保障5、唯一ID+指纹码机制Redis原子性(推荐)二、优先级队列1、使用场景2、如何添加3、实战4、测试结果三、惰性队列1、使用场景2、两种模式3、内存开销对比......
  • Abp vNext 禁用数据库日志
    AbpvNext禁用数据库日志使用AbpvNext6.0在abp创建的数据库里有四张表是跟日志有关的AbpAuditLogs:审计日志,记录网络请求的AbpSecurityLogs:安全日志,记录登录日志的OpenIddictAuthorizations:OpenIddict记录登录操作的OpenIddictTokens:OpenIddict记录token的,access_token和......
  • el-table-column width="180" 宽度自动成比例缩放缩小 表头宽度不对 原因
    首先el-table-columnwidth="180"的设置原理是如下面加粗部分 <tablecellspacing="0"cellpadding="0"border="0"class="el-table__header"style="width:1638px;"><colgroup><colname="el-table_......