首页 > 其他分享 >hdu: Count(矩阵快速幂)

hdu: Count(矩阵快速幂)

时间:2023-01-14 21:01:20浏览次数:33  
标签:Count hdu matrix int ll 矩阵 编号 奶牛

Problem Description
Farmer John有n头奶牛.
某天奶牛想要数一数有多少头奶牛,以一种特殊的方式:
第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶牛是第n头,那么他的编号就是2倍的第n-2头奶牛的编号加上第n-1头奶牛的编号再加上自己当前的n的三次方为自己的编号.
现在Farmer John想知道,第n头奶牛的编号是多少,估计答案会很大,你只要输出答案对于123456789取模.

Input
第一行输入一个T,表示有T组样例
接下来T行,每行有一个正整数n,表示有n头奶牛 (n>=3)
其中,T=10^4,n<=10^18

Output
共T行,每行一个正整数表示所求的答案


输入样例

5
3
6
9
12
15

输出样例

31
700
7486
64651
527023

带次方项的矩阵快速幂,利用二项式定理找寻n^x于(n-1)^xi的关系
可以采用写unit的方式给ans赋初始值
附ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=6,mod=123456789;
int unit[N][N]={{1,2,1,3,3,1},{1,0,0,0,0,0},{0,0,1,3,3,1},{0,0,0,1,2,1},
{0,0,0,0,1,1},{0,0,0,0,0,1}};
typedef long long ll;
struct matrix{
    ll ma[N][N];
};
matrix muti(matrix a,matrix b)
{
    matrix c;
    for(int i=0;i<N;++i)
      for(int j=0;j<N;++j)
      c.ma[i][j]=0;
    for(int i=0;i<N;++i)
      for(int j=0;j<N;++j)
        for(int z=0;z<N;++z)
        {c.ma[i][j]+=(a.ma[i][z]%mod*(b.ma[z][j]%mod))%mod;
        c.ma[i][j]%=mod;
        }
    return c;
}
matrix pow_ma(matrix a,ll k)
{
    if(k==1) return a;
    matrix s;
    s=pow_ma(muti(a,a),k/2);
    if(k%2) s=muti(s,a);
    return s;
}
int main()
{
    int T;
    ll n;
    cin>>T;
    int b[N]={2,1,8,4,2,1};
    while(T--)
    {
        scanf("%lld",&n);
        matrix ans;
        for(int i=0;i<N;++i)
          for(int j=0;j<N;++j)
          ans.ma[i][j]=unit[i][j];
        ans=pow_ma(ans,n-2);
        ll sum=0;
        for(int i=0;i<N;++i)
        {
            sum+=b[i]*ans.ma[0][i]%mod;
        }
        printf("%lld\n",sum%mod);
    }
    return 0;
}

 

 

标签:Count,hdu,matrix,int,ll,矩阵,编号,奶牛
From: https://www.cnblogs.com/ruoye123456/p/17052532.html

相关文章

  • hdu:Queuing(矩阵快速幂)
    ProblemDescriptionQueuesandPriorityQueuesaredatastructureswhichareknowntomostcomputerscientists.TheQueueoccursofteninourdailylife.Ther......
  • 杨氏矩阵
    问题:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);杨氏矩阵普及:杨氏矩阵是对组......
  • hdu:Problem Description Lele now is thinking about a s(矩阵快速幂)
    ProblemDescriptionLelenowisthinkingaboutasimplefunctionf(x).Ifx<10f(x)=x.Ifx>=10f(x)=a0 f(x-1)+a1 f(x-2)+a2 f(x-3)+……+a9 ......
  • 代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
    一、参考资料有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.有序数组的平方.html视频讲......
  • 【Pytorch】多维矩阵的加法
    目录​​简介​​​​问题描述​​​​测试​​​​解释​​​​结语​​简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰......
  • 【Pytorch】将矩阵中的元素按照区间重新赋值
    目录​​简介​​​​场景描述​​​​解决方法​​​​结语​​简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序......
  • 【Pytorch】计算矩阵中向量之间的两两相似性
    目录​​简介​​​​场景描述​​​​解决方法​​​​结语​​简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序......
  • MySQL中的COUNT(*)和COUNT(col)
    ​另一篇:differencebetweencount(1)andcount(*) 看看人们是如何使用COUNT(*)和COUNT(col)的,看起来大多数人都认为它们是同义词,只是使用他们喜欢的,而在性能甚至查询......
  • Count Pairs With XOR in a Range
    CountPairsWithXORinaRangeGivena(0-indexed) integerarray nums andtwointegers low and high ,returnthenumberofnicepairs.Anicepair is......
  • P1005 [NOIP2007 提高组] 矩阵取数游戏
    题目传送门前言今天依旧是不写高精的一天呢!(是的,这位作者又只拿了开\(LL\)的\(\color{yellow}{60}\)分)思路描述看到数据\(n,m\le80(30)\)就知道数组可以任性开,......