`
Simone_chou
  • 浏览: 192657 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Queuing(矩阵快速幂)

    博客分类:
  • HDOJ
 
阅读更多

Queuing

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2586    Accepted Submission(s): 1210


Problem Description
Queues and Priority Queues are data structures which are known to most computer scientists. The Queue occurs often in our daily life. There are many people lined up at the lunch time.

  Now we define that ‘f’ is short for female and ‘m’ is short for male. If the queue’s length is L, then there are 2L numbers of queues. For example, if L = 2, then they are ff, mm, fm, mf . If there exists a subqueue as fmf or fff, we call it O-queue else it is a E-queue.
Your task is to calculate the number of E-queues mod M with length L by writing a program.
 

 

Input
Input a length L (0 <= L <= 10 6) and M.
 

 

Output
Output K mod M(1 <= M <= 30) where K is the number of E-queues with length L.
 

 

Sample Input
3 8
4 7
4 8
 

 

Sample Output
6
2
1
 

 

Author

 

WhereIsHeroFrom

     题意:

     给出 L 和 M,代表 L 长度的队伍,f 代表女生,m 代表有男生,存在 fmf 或者 fff 的队伍叫 O - queue,没有叫做 E - queue,求出 L 长度序列的队伍有多少种 E - queue 的可能,结果 % M。

 

     思路:

     矩阵快速幂。

     设 ai 为以 fm 为后缀的包含序列的种数;

          bi 为以 ff 为后缀的包含序列的种数;

             ci 为以 mm 为后缀的包含序列的种数;

         di 为以 mf 为后缀的包含序列的种数;

         ei 为以 fm 为后缀的不包含序列的种数;

         fi 为以 ff 为后缀的不包含序列的种数;

         gi 为以 mm 为后缀的不包含序列的种数;

         hi 为以 mf 为后缀的不包含序列的种数。

     所以:

     ai+1 = bi + ci; bi+1 = bi + ci + di ; ci+1 = ai + di + ei ; di+1 = ai + di;

     ei+1 = fi + gi; fi+1 = gi ;gi+1 = hi ; hi = ei + hi

     所以可以得出矩阵:

     
 

     

     AC:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

typedef vector<int> vec;
typedef vector<vec> mat;

mat mul (mat a, mat b, int mod) {
    mat c(a.size(), vec(b[0].size()));

    for (int i = 0; i < a.size(); ++i) {
        for (int j = 0; j < b[0].size(); ++j) {
            for (int k = 0; k < b.size(); ++k) {
                c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % mod;
            }
        }
    }

    return c;
}

mat pow (mat a, int n, int mod) {
    mat b(a.size(), vec(a[0].size()));
    for (int i = 0; i < a.size(); ++i) {
        b[i][i] = 1;
    }

    while(n > 0) {
        if (n & 1) b = mul(b, a, mod);
        a = mul(a, a, mod);
        n >>= 1;
    }

    return b;
}

int main() {

    int l, m;
    while (~scanf("%d%d", &l, &m)) {

        mat a(8, vec(8));
        a[0][1] = 1, a[0][2] = 1, a[1][1] = 1;
        a[1][2] = 1, a[1][5] = 1, a[2][0] = 1;
        a[2][3] = 1, a[2][4] = 1, a[3][0] = 1;
        a[3][3] = 1, a[4][5] = 1, a[4][6] = 1;
        a[5][6] = 1; a[6][7] = 1, a[7][4] = 1;
        a[7][7] = 1;

        mat b(8, vec(1));
        b[1][0] = 1, b[2][0] = 1, b[4][0] = 2;
        b[5][0] = 1, b[6][0] = 1, b[7][0] = 2;

        if (l > 3) {

            a = pow(a, l - 3, m);
            b = mul(a, b, m);

            int sum = 0;
            for (int i = 4; i < 8; ++i) {
                sum = (sum + b[i][0]) % m;
            }
            printf("%d\n", sum % m);
            
        } else if (l == 3) printf("%d\n", 6 % m);
        else printf("0\n");

    }

    return 0;
}

 

  • 大小: 885.1 KB
分享到:
评论

相关推荐

    Java Microsoft Message Queuing Library (MSMQ)

    Java Microsoft Message Queuing (MSMQ) Library 是一个用于在Java应用程序中与Microsoft的MSMQ服务交互的类库。MSMQ是一种消息队列技术,它允许应用程序异步通信,即使发送方和接收方在通信时不可用,也能确保消息...

    Queuing Analysis

    **基本排队关系**(Basic Queuing Relationships)描述了不同参数之间的相互依赖性,其中最著名的是小林公式(Little’s formula),它定义了平均队列长度、平均等待时间和平均到达率之间的关系。 **假设**...

    Introduction to Queuing Theory.PPT (English)

    《排队论基础介绍》 排队论,又称为Queueing Theory,是运筹学的一个分支,主要研究在资源有限的情况下,如何有效地处理大量服务需求的问题。它由一系列数学模型和分析方法构成,旨在优化系统性能,减少等待时间和...

    message_queuing_for_business_integration

    在企业集成领域,消息队列(Message Queuing)技术已成为不可或缺的一部分,特别是在处理分布式系统间的通信与协调时。本文将深入探讨消息队列在企业集成中的应用,以及Oracle AQ(Advanced Queuing)作为实现这一...

    QBookSolutionHead_queuing_

    《QBookSolutionHead_queuing_》是一个聚焦于排队论(Queuing Theory)的学习资源,主要包含了一份名为“QBookSolutionHead.pdf”的文档。排队论是运筹学的一个分支,主要研究服务系统中等待队列的形成、发展以及...

    Performance Analysis of Queuing and Computer Networks 英文版 超清晰 非扫描 有完整书签

    “Performance Analysis of Queuing and Computer Networks”这一标题直接指出了本书的主题:它专注于研究计算机网络中排队系统的性能分析。排队理论是理解和服务设计中管理不确定性的关键工具之一,尤其是在通信...

    排队理论测试题,Queuing Theory and Optimization

    在本题中,我们面临的是一个使用排队理论解决交通规划问题的案例。排队理论是运筹学的一个分支,它研究和服务系统中等待的个体(如车辆、顾客等)的行为模式。在这个特定的问题中,目标是确定新郊区的道路宽度,即每...

    HTB linux queuing discipline manual--userguide[HTB 流量控制手册——用户指导]

    **Linux HTB流量控制手册——用户指导** 在Linux操作系统中,网络流量管理是至关重要的,尤其是在高带宽...通过阅读《HTB Linux Queuing Discipline Manual》,用户将深入理解这一机制,并能熟练地在实际环境中应用。

    NCQ(Native command queuing)原生指令技术介绍

    - **多媒体处理**:在处理大量图像或视频数据时,NCQ可以确保数据快速有效地传输,提高多媒体制作软件的运行效率。 - **数据库应用**:对于需要频繁读写操作的数据库系统,NCQ可以提高数据检索速度,缩短查询响应...

    Network Caculus A Theory of Deterministic Queuing Systems for the Internet

    该书的PDF版本(0 BOOK Network Caculus A Theory of Deterministic Queuing Systems for the Internet v4.pdf)应该包含了详细的概念阐述、数学推导和实例分析,是网络工程领域的重要参考资料。

    Laravel开发-queuing

    在Laravel框架中,Queuing(队列)是一种优化应用性能、处理大量后台任务的关键技术。它通过将耗时的任务放到后台处理,而非立即执行,从而显著提高Web应用的响应速度,为用户提供更快的交互体验。Laravel的队列系统...

    oracle 9i: implement advanced queuing

    Oracle 9i: Implement Advanced Queuing 是一个关于Oracle数据库中高级队列技术的教程,主要针对的是Oracle 9i版本。在Oracle数据库中,高级队列(Advanced Queuing,简称AQ)是一个内置的、全面集成的消息队列系统...

    Oracle8i Application Developer’s Guide - Advanced Queuing Releas

    高级队列提供了多种故障排除机制,如错误日志、队列监控和代理服务器状态检查等,以帮助开发者快速定位和解决高级队列故障。 Oracle8i Application Developer’s Guide - Advanced Queuing Release 2 (8.1.6) 是一...

    e-business_integration_using_advanced_queuing

    e-business_integration_using_advanced_queuing

    paiduilun.rar_queuing_排队_排队论

    **排队论**,又称**Queuing Theory**,是概率论的一个分支,主要研究服务系统中等待服务的对象(如顾客)的数目、等待时间以及服务过程的统计规律性。这一理论在IT行业中有着广泛的应用,特别是在系统设计、网络优化...

    AN-1128_queuing_python_threads_

    标题“AN-1128_queuing_python_threads_”暗示了这是一个关于在Python中使用队列(Queuing)和线程(Threads)的教程或文档,可能是为了优化多处理器环境下的程序性能。描述中提到“Using Python Queues.main and ...

    MQTT(Message Queuing Telemetry Transport)

    《MQTT 协议规范中文版》一书中对 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)进行了描述: MQTT 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单...

    Queuing_system_simulator

    本项目“Queuing_system_simulator”就是这样一个基于C#编程语言实现的排队系统模拟器,它通过精确的算法和数据结构来模拟实际的排队过程,以分析系统的性能和改善方案。 一、C#语言基础 C#是微软公司开发的一种...

Global site tag (gtag.js) - Google Analytics