hdu 1757 A Simple Math Problem

简介: 点击打开链接 思路:矩阵快速幂 分析: 1 裸题 代码: /************************************************ * By: chenguolin ...

点击打开链接

思路:矩阵快速幂

分析:

1 裸题


代码:

/************************************************
 * By: chenguolin                               * 
 * Date: 2013-08-23                             *
 * Address: http://blog.csdn.net/chenguolinblog *
 ***********************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

typedef __int64 int64;
const int N = 10;

int k , MOD;
int arr[N] , f[N];
struct Matrix{
    int64 mat[N][N];
    Matrix operator*(const Matrix& m)const{
        Matrix tmp;
        for(int i = 0 ; i < N ; i++){
            for(int j = 0 ; j < N ; j++){
                tmp.mat[i][j] = 0;
                for(int k = 0 ; k < N ; k++){
                    tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;
                    tmp.mat[i][j] %= MOD;
                }
            } 
        }
        return tmp;
    }
};

int64 Pow(Matrix &m , int k){
    Matrix ans;
    memset(ans.mat , 0 , sizeof(ans.mat));
    for(int i = 0 ; i < N ; i++)
        ans.mat[i][i] = 1;
    k -= 9;
    while(k){
        if(k&1)
           ans = ans*m;
        k >>= 1;
        m = m*m;
    } 
    int64 sum = 0;
    for(int i = 0 ; i < N ; i++){
        sum += ans.mat[0][i]*f[N-i-1]%MOD;
        sum %= MOD;
    }
    return sum;
}

void init(Matrix &m){
    memset(m.mat , 0 , sizeof(m.mat));
    for(int i = 0 ; i < N ; i++)
        m.mat[0][i] = arr[i];
    for(int i = 0 ; i < N-1 ; i++)
        m.mat[i+1][i] = 1;
    for(int i = 0 ; i < N ; i++)
        f[i] = i;
}

int main(){
    Matrix m;
    while(scanf("%d%d" , &k , &MOD) != EOF){
         for(int i = 0 ; i < N ; i++)
             scanf("%d" , &arr[i]);
         init(m);
         if(k < 10)
             printf("%d\n" , k%MOD);
         else
             printf("%I64d\n" , Pow(m , k));
    }
    return 0;
}




目录
相关文章
|
NoSQL 安全 Java
解决Unknown redis exception及event executor terminated错误的方法
解决这类问题时,保持耐心和细致是关键。通常,通过系统地检查和排除潜在原因,大多数问题最终都能被解决。
2131 1
|
10月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
220 13
|
传感器 边缘计算 自动驾驶
|
SQL 数据采集 分布式计算
Dataphin
Dataphin 是一款基于数据中台思想打造的数据管理平台,它提供了数据建模、数据集成、数据质量、数据开发、数据服务等一系列数据管理功能,旨在帮助企业实现数据的有效管理、优化数据资产和提高数据价值。
791 0
|
Ubuntu Java Linux
使用阿里云服务器开我的世界基岩版服务器
想和好友玩我的世界手机版但是不在同一个局域网那么这是你们最好的选择,那就是自己动手开一个。
1098 0
使用阿里云服务器开我的世界基岩版服务器
|
机器学习/深度学习 缓存 分布式计算
|
数据采集 供应链 前端开发
业务数据双中台助力实现大型医药集团
业务数据双中台助力实现大型医药集团
525 0
|
存储 弹性计算 安全
阿里云服务器4核16G配置可选实例规格及最新价格和收费标准参考
阿里云4核16G服务器有通用型 g6、通用型 g7、内存型 r7p等20多种中实例规格可选,实例规格不同,收费标准与活动价格也不同,目前阿里云通用型g7和通用算力型u1实例4核16G云服务器有优惠,最低价仅需1710元1年,本文为大家介绍一下阿里云服务器4核16G配置可选实例规格和收费标准及最新活动报价,以供大家参考。
|
Linux 数据库 C语言
C语言可以应用在哪些领域?
在计算机编程语言中,C语言是用的最多的一种语言,也是目前最为热门的一种编程语言之一。例如嵌入式的C51单片机、ARM的CORTE-M3/4等系列芯片下编程,绝大多数情况下都是用C语言进行编程以及产品开发的。
|
弹性计算 Linux 数据安全/隐私保护
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
21018 2
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同