hdu 5068 分类: hdu 2015-0...


一道好题~


用矩阵代替DP方程。

对于每个房间构造一个矩阵mat,mat[i][j] = 1 或 0 表示 i 到 j 是否能到达。


然后线段树每个结点维护区间区间矩阵乘法的结果

对于询问操作用矩阵乘法合并区间即可。


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <vector>
#include <utility>
#include <stack>
#include <queue>
#include <iostream>
#include <algorithm>

template<class Num>void read(Num &x)
{
    char c; int flag = 1;
    while((c = getchar()) < '0' || c > '9')
        if(c == '-') flag *= -1;
    x = c - '0';
    while((c = getchar()) >= '0' && c <= '9')
        x = (x<<3) + (x<<1) + (c-'0');
    x *= flag;
    return;
}
template<class Num>void write(Num x)
{
    if(x < 0) putchar('-'), x = -x;
    static char s[20];int sl = 0;
    while(x) s[sl++] = x%10 + '0',x /= 10;
    if(!sl) {putchar('0');return;}
    while(sl) putchar(s[--sl]);
}
const int maxn = 50005, Mod = 1e9 + 7;

struct Matrix
{
    long long a[2][2];
}emp, tree[maxn<<2];

Matrix operator *(const Matrix &A, const Matrix &B)
{
    Matrix ret = emp;

    for(int i = 0; i < 2; i++)
        for(int j = 0; j < 2; j++)
            for(int k = 0; k < 2; k++)
                ret.a[i][j] = (ret.a[i][j] + A.a[i][k]*B.a[k][j])%Mod;

    return ret;        
}

#define L(x) ((x)<<1)
#define R(x) ((x)<<1|1)

void update(int x)
{
    tree[x] = tree[L(x)]*tree[R(x)];
}
void build(int ll,int rr,int si)
{
    if(ll == rr)
    {
        for(int i = 0; i < 2; i++)
            for(int j = 0; j < 2; j++)
                tree[si].a[i][j] = 1;
        return;        
    }
    int mid = (ll + rr)>>1;

    build(ll, mid, L(si));
    build(mid + 1, rr, R(si));

    update(si);
}
void change(int k,int x,int y,int ll,int rr,int si)
{
    if(ll == rr)
    {
        tree[si].a[x][y] ^= 1;
        return;
    }

    int mid = (ll + rr)>>1;

    if(k <= mid) change(k, x, y, ll, mid, L(si));
    else change(k, x, y, mid + 1, rr, R(si));

    update(si);
}
Matrix query(int l,int r,int ll,int rr,int si)
{    
    if(ll == l && rr == r) return tree[si];

    int mid = (ll + rr)>>1;

    if(mid < l)    return query(l, r, mid + 1, rr, R(si));
    if(r <= mid) return query(l, r, ll, mid, L(si));
    return query(l, mid, ll, mid, L(si))*query(mid + 1, r, mid + 1, rr, R(si));
}
#undef L
#undef R

long long calcu(Matrix P)
{
    return (P.a[0][0] + P.a[0][1] + P.a[1][0] + P.a[1][1])%Mod;
}


int main()
{
    int n, m;

#ifndef ONLINE_JUDGE
    freopen("hdu5068.in","r",stdin);
    freopen("hdu5068.out","w",stdout);
#endif

    while(scanf("%d%d",&n,&m) != EOF)
    {
        build(1, n - 1, 1);

        while(m --)
        {
            int op, x, y, z;

            read(op), read(x), read(y);

            if(op)
                read(z), change(x, y - 1, z - 1, 1, n - 1, 1);
            else
                write(calcu(query(x, y - 1, 1, n - 1, 1))), puts("");
        }
    }

#ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/dashgua/p/4722959.html

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

相关推荐

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

HDU-5068-Harry And Math Teacher(线段树)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5068 根据每层两个点的到下一层两个点的连接情况,可以得到一个2*2的矩阵,初始矩阵全部联通都为1,不连通为0,显然一段区间内的方案数就是区间内矩阵相乘后的矩阵行列值求和。简单的线段树维护区间矩阵乘积就好。 #pragma comment(linker, "/STACK:1024000000,1

不会吃鱼的喵 585

逆向实战:手把手教你用Frida绕过Flutter App的SSL Pinning(附脚本修改指南)

本文详细介绍了如何利用Frida工具绕过Flutter应用的SSL Pinning保护机制,包括静态分析定位关键函数、定制Frida Hook脚本以及流量捕获的完整解决方案。通过实战案例和脚本修改指南,帮助安全研究人员有效应对Flutter应用的安全挑战,特别适用于安卓平台的逆向工程和抓包需求。

weixin_28723171的博客 402

Hdu5068线段树

题意 :每层都有2个门,每个门后面都能通向下一层的两个门,有两个操作 ,第一个 问 从a层到 b层的方法数,第二个 修改 其中某门通向某门的状态。 线段树单点更新,矩阵连通性构造 离散数学里有讲。 #include <cstdio> #include <cstring> #include <algorithm> #include <cl...

weixin_30709809的博客 130

GLM-5.2模型自部署实战:如何通过量化与vLLM优化实现远超官方API的推理速度

在大模型应用开发中,模型推理速度是影响用户体验和系统性能的核心指标。其原理在于通过优化计算图、内存管理和并行计算来提升吞吐量与降低延迟。技术价值体现在能够为高并发、低延迟的实时应用提供稳定高效的AI服务能力,广泛应用于智能客服、代码生成、内容创作等场景。其中,模型量化通过降低权重精度(如INT4/INT8)来大幅减少显存占用和计算量,而推理引擎(如vLLM)则通过连续批处理和PagedAttention等技术最大化硬件利用率。本文聚焦于GLM-5.2模型,详细阐述如何通过量化技术与vLLM推理引擎的深度优化

weixin_29032337的博客 319

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

hdu-5068 Harry And Math Teacher

http://acm.hdu.edu.cn/showproblem.php?pid=5068

风儿-zsj的专栏 613

S32K144(1)新建裸机项目以及烧录调试工程

目录 1、简介 2、S32DS新建裸机项目 2.1、新建空的项目 2.2、选择标准库的S32DS 2.3、选择使用EWL官方库 2.4、新建成功 3、烧录工程 3.1、点击Debug,选择Debug Configurations 3.2、新建GDB SEGGER J-Link Debugging 3.3、确认Project和C/C++ Applicants是需要烧写的项目名和路径正确 3.4、确认Executable Device name Interface等各个配置信息正确,后点击

朗朗上口就行啦的博客 4974

hdu 5068 线段树维护矩阵乘积

http://acm.hdu.edu.cn/showproblem.php?pid=5068 题意给的略不清晰 m个询问:从i层去j层的方法数(求连段乘积)或者修改从x层y门和x+1层z门的状态反转(更新只需更新一个节点的矩阵) 直接贴题解 我们可以把第i层跟第i+1层之间楼梯的通断性构造成一个2*2的通断性矩阵,1表示通,0表示不通。那么从第a层到第b层,就是将a到b-1的通...

weixin_30660027的博客 219

GEE APP:基于GEE的红树林监测平台

本文将介绍如何利用Google Earth Engine平台,结合Landsat系列卫星影像和SRTM高程数据,实现红树林分布的动态监测与变化分析。

此星光明博客 159

基于Simulink进行步进电机的重复控制仿真建模

重复控制概述目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

amy_mhd的博客 266

HDU 5068 Harry And Math Teacher 线段树+矩阵乘法

题意:   一栋楼有n层,每一层有2个门,每层的两个门和下一层之间的两个门之间各有一条路(共4条)。   有两种操作:   0 x y : 输出第x层到第y层的路径数量。   1 x y z : 改变第x层 的 y门 到第x+1层的 z门的通断情况。 思路:   门之间的路径数可以用矩阵来表示,经过的中间层可以用矩阵乘积表示。 所以用线段树维护矩阵乘积即可。 代码:  ...

166

【电容/电感】电路板会“滋滋”的响,我们称它为啸叫

一、啸叫的起源 大部分硬件工程师应该都遇到过,PCBA上电后出现“滋滋滋”的叫声,其声响或大或小,或时有时无,或深沉或刺耳,或变化无常者皆有。该现象我们称为“啸叫”,一般分为电感啸叫和电容啸叫。

云轩阁 6万+

[动态dp]线段树维护转移矩阵

背景:czy上课讲了新知识,从未见到过,总结一下。 所谓动态dp,是在动态规划的基础上,需要维护一些修改操作的算法。 这类题目分为如下三个步骤:(都是对于常系数齐次递推问题) 1先不考虑修改,不考虑区间,直接列出整个区间的dp方程。这个是基础,动态dp无论如何还是dp(这一步是一般是重点) 2.列出转移矩阵。由于有很多修改操作,我们将数据集中在一起处理,还可以利用矩阵结合律,并且...

weixin_34404393的博客 260

【原创教程】西门子1500与施耐德伺服的通讯以及调试

该函数块主要描述伺服的手动,左边的引脚Forward是指伺服手动正转,Backward是指伺服手动反转,Fast是指手动的某个方向为快速运行,TipPos手册上描述为固定值,WaitTIme是指伺服手动的相应时间,VeloSlow指伺服手动正常慢速运动的速度,VeloFast指伺服手动快速运动的速度,Acceleration是指伺服手动的加速度,Decelertion是指伺服手动的减速度。该函数块用于伺服停止,左边的引脚Execute为伺服停止执行,Deceleration含义为减速,Axis为轴。

Qinmingyue13的博客 1374

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hdu 5068 Harry And Math Teacher 线段树

今天状态不错把这题A了,当时做的时候看错题了

zzblac的专栏 695

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hdu 5068(线段树+矩阵乘法)

矩阵乘法来进行所有路径的运算, 线段树来查询修改。 关键还是矩阵乘法的结合律。   Harry And Math Teacher Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 326    Accepted Submission(s...

weixin_34416649的博客 191

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDU 5068 Harry And Math Teacher (矩阵处理,线段树)

题目:LINK 该层的两个门到下一层的两个门的开关状态可以表示成一个2*2的矩阵1表示开0表示关,每次状态的改变就是对应位置0->1, 1->0,对于查询[a,b], 只要求出a到b-1的矩阵的乘积就可以了。 由于有改变和多次查询,所以可以用线段树进行维护,单点更新,区间查询。

Napoleon 990

HDU 5068 Harry And Math Teacher

矩阵快速幂+线段树

Muti-Agent 2839

【HDU5068】Harry And Math Teacher

线段树维护区间矩阵乘法

sdfzchy的博客 290

hdu5068 线段树

因为的状态只在两个门之间有效,很容易想到区间合并

creater_X 751

Hdu--5068(线段树,矩阵乘法,思维精巧)

2014-10-1900:01:58 思路:比赛时只知道要用到线段树,但不知道怎么解决计数问题QAQ。看了题解幡然醒悟,果断1A。   这个巧妙的方法就是利用矩阵来计数,用2*2的矩阵来存门与门之间的连通情况,然后我们发现两个矩阵相乘后矩阵内数的和的含义就是所要计的数。   矩阵的行表示从哪个门出发,列表示到达哪个门。   比如:1 1 * 1 1 = 2 2就表示两排全连通的...

dingdi3021的博客 169

hdu 5068 Harry And Math Teacher ( 线段树+矩阵乘法 )

Harry And Math Teacher Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 475    Accepted Submission(s): 139 Problem Description As we all

llin-黎辰 675

NIT4941/HDU5068 Harry And Math Teacher·线段树维护矩阵转移

题解 帖题解: 我们可以把第i层跟第i+1层之间楼梯的通断性构造成一个2*2的通断性矩阵,1表示通,0表示不通。 那么从第a层到第b层,就是将a到b-1的通断性矩阵连乘起来,然后将得到的答案矩阵上的每个元素加起来即为方案数。 想到矩阵的乘法是满足结合律的,那么我们可以用线段树来维护矩阵的乘积。 每次我们只会修改某一个楼梯的通断性,所以就只是简单的线段树单点更新,成段求乘积而已。 hdu崩了,先存着...

Yubing792289314的博客 304

HDU 5068 Harry And Math Teacher 线段树维护矩阵乘积

题意:相邻的两层楼之间有两个门,每个门内都有一个楼梯,分贝

leodestiny 1036

hdu2850(2009多校第四场) n个数放在m个集合使(最大-最小)最小 优先队列贪心...

从大到小排序,每次选择用时最少的集合== 这尼玛是一个错误的贪心 6 2 7000 5000 3000 3000 3000 3000 就跪了gg 不过网上也没有正解,就这样水过去吧2333 1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 #include&...

weixin_33842328的博客 184
上一篇: bzoj 3211 分类: bzoj 2015...
下一篇: bzoj 2743 分类: bzoj 2015...
aa288288
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值