Tr A (矩阵快速幂(模板))

本文介绍了一道关于矩阵快速幂的经典题目,并分享了解题思路和实现细节。通过实例讲解如何利用矩阵快速幂解决特定类型的问题,强调了代码中易忽略的陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目来源】https://vjudge.net/problem/HDU-1575
【题意】
中问题意不在解释。
【思路】
很水的一个快速幂题,而且又是给出了一个矩阵,所以想到矩阵快速幂。。
然而,并没有在敲完代码后直接过,因为在代码里我用到了两个矩阵:ans和base,他们俩的含义就和快速幂的一样,但是呢,本题是T组输入,然后我把他们俩用结构体定义在了外面,base是一直在更新(因为是把矩阵直接输入的),但是ans没有清0,所以又浪费了一点时间,,
【代码】

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<limits.h>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int mod=9973;
typedef unsigned long long ll;
typedef long long LL;
int n,k;
struct mat
{
    int a[14][14];
    mat()
    {
        mem(a,0);
        for(int i=1; i<=10; i++)
            a[i][i]=1;
    }
} base;
mat operator*(mat s,mat t)
{
    mat r;
    mem(r.a,0);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            for(int p=1; p<=n; p++)
            {
                r.a[i][j]=r.a[i][j]+s.a[i][p]*t.a[p][j];
                if(r.a[i][j]>=mod)
                    r.a[i][j]%=mod;
            }
    return r;
}
void pow_mat(mat &ans)
{
    while(k)
    {
        if(k&1)
            ans=ans*base;
        base=base*base;
        k>>=1;
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        mat ans;
        scanf("%d%d",&n,&k);
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                scanf("%d",&base.a[i][j]);
        pow_mat(ans);
        int sum=0;
        for(int i=1; i<=n; i++)
        {
            sum+=ans.a[i][i];
            if(sum>=mod)
                sum%=mod;
        }
        printf("%d\n",sum);
    }
}
### 技术报告模板概述 技术报告(Technical Report,简称TR)通常用于记录和展示特定项目的分析、设计、实现或测试过程中的详细数据和技术细节。根据引用的内容[^3],可以推断出技术报告可能涉及仿真工具的后处理分析结果及其输出形式。 以下是基于现有引用内容构建的技术报告模板框架: --- #### 1. 文档基本信息 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>技术报告 - ${REPORT_TITLE}</title> </head> <body> <h1>${REPORT_TITLE}</h1> <p><strong>文档编号:</strong> ${DOCUMENT_ID}</p> <p><strong>作者:</strong> ${AUTHOR_NAME}</p> <p><strong>日期:</strong> ${DATE}</p> ``` 此部分定义了HTML文档的基础结构,并包含了必要的元信息,如标题、作者、日期等[^2]。 --- #### 2. 测试概览 ```html <h2>测试概览</h2> <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse;"> <tr> <th>项目名称</th> <td>${PROJECT_NAME}</td> </tr> <tr> <th>触发原因</th> <td>${CAUSE}</td> </tr> <tr> <th>测试环境</th> <td>${TEST_ENVIRONMENT}</td> </tr> </table> ``` 该部分内容提供了关于测试的基本信息摘要,类似于Jenkins测试报告中的项目描述。 --- #### 3. 数据分析与图表 ```html <h2>数据分析</h2> <p>以下是对${ANALYSIS_TYPE}的数据分析:</p> <!-- 图表区域 --> <div id="chart-area"> <!-- 嵌入动态生成的图表 --> <img src="${CHART_IMAGE_PATH}" alt="数据分析图"> </div> <!-- 表格区域 --> <h3>原始数据表格</h3> <table border="1" cellpadding="5" cellspacing="0" style="border-collapse: collapse;"> <thead> <tr> <th>时间戳</th> <th>参数A</th> <th>参数B</th> </tr> </thead> <tbody> <tr> <td>T1</td> <td>${PARAM_A_T1}</td> <td>${PARAM_B_T1}</td> </tr> <tr> <td>T2</td> <td>${PARAM_A_T2}</td> <td>${PARAM_B_T2}</td> </tr> </tbody> </table> ``` 这一节展示了如何通过嵌入图表和表格来呈现复杂的数据集。对于仿真的TR0文件解析后的波形分析,可以通过类似的结构显示其测量结果[^3]。 --- #### 4. 结论与建议 ```html <h2>结论与建议</h2> <ul> <li><strong>主要发现:</strong> ${MAIN_FINDINGS}</li> <li><strong>改进建议:</strong> ${IMPROVEMENT_SUGGESTIONS}</li> </ul> ``` 总结部分强调了研究的主要成果以及未来工作的方向。 --- #### 5. 附录 ```html <h2>附录</h2> <p>附加材料如下所示:</p> <ol> <li><a href="${APPENDIX_FILE_1}">附件一:原始数据文件</a></li> <li><a href="${APPENDIX_FILE_2}">附件二:配置文件</a></li> </ol> ``` 提供额外的支持资料链接以便于进一步查阅。 --- ### 示例代码片段 如果需要自动生成此类报告,则可借助脚本完成变量替换工作。例如,在Python中使用`string.Template`模块: ```python from string import Template template_content = """ <!DOCTYPE html> <html lang="en"> ... """ data = { 'REPORT_TITLE': 'DDR4信号完整性分析', 'DOCUMENT_ID': 'TR-DDR4-SI-202309', 'AUTHOR_NAME': '张三', 'DATE': '2023年9月1日' } final_report = Template(template_content).substitute(data) print(final_report) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值