`
阿尔萨斯
  • 浏览: 4187031 次
社区版块
存档分类
最新评论

uva 10655 - Contemplation! Algebra(矩阵快速幂)

 
阅读更多

题目连接:uva 10655 - Contemplation! Algebra

题目大意:输入非负整数,p,q,n,求an+bn的值,其中a和b满足a+b=p,ab=q,注意a和b不一定是实数。

解题思路:定义f(n)=an+bn,则有f(n)(a+b)=(an+bn)(a+b)=an+1+abn+ban+bn+1=f(n+1)+abf(n1), 所以f(n+1)=(a+b)f(n)abf(n1),用矩阵快速幂求解。

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

using namespace std;

const int maxsize = 100;
typedef long long ll;
typedef long long type;

struct Mat {
    int r, l;
    type arr[maxsize][maxsize];

    Mat (int r = 0, int l = 0) { 
        set(r, l);
        memset(arr, 0, sizeof(arr));
    }

    void set (int r, int l) {
        this->r = r;
        this->l = l;
    }

    Mat operator * (const Mat& u) {
        Mat ret(r, u.l);
        for (int k = 0; k < l; k++) {
            for (int i = 0; i < r; i++)
                for (int j = 0; j < u.l; j++)
                    ret.arr[i][j] = (ret.arr[i][j] + arr[i][k] * u.arr[k][j]);
        }
        return ret;
    }
};

void put (Mat x) {
    for (int i = 0; i < x.r; i++) {
        for (int j = 0; j < x.l; j++)
            printf("%lld ", x.arr[i][j]);
        printf("\n");
    }
}

Mat pow_mat (Mat ans, Mat x, ll n) {

    while (n) {
        if (n&1)
            ans = x * ans;
        x = x * x;
        n >>= 1;
    }
    return ans;
}

int main () {
    ll p, q, n;
    while (scanf("%lld%lld%lld", &p, &q, &n) == 3 && p + q + n) {
        Mat x(2, 2);
        x.arr[0][1] = 1;
        x.arr[1][0] = -q;
        x.arr[1][1] = p;

        Mat ans(2, 1);
        ans.arr[0][0] = 2;
        ans.arr[1][0] = p;

        if (n > 1) {
            ans = pow_mat(ans, x, n-1);
            printf("%lld\n", ans.arr[1][0]);
        } else
            printf("%lld\n", ans.arr[n][0]);
    }
    return 0;
}
分享到:
评论

相关推荐

    django-contemplation:一个更简单、更快的 Django 模板库

    这个项目已经停滞了......但是,现在或多或少是生产质量! 沉思 但是..... 不是已经有用于更快模板的 Jinja 了吗? 嗯,是。 但这最初是让我测试和思考 [考虑,如果你愿意] 其他方法来处理模板的空间。

    pride_and_prejudice_and_python:一个愚蠢的Jupyter笔记本,演示了用n-gram和Markov链生成文本的过程

    傲慢与偏见与Python 一个Jupyter笔记本,它使用n-... but her contemplation of one stranger was soon put to an end by exclamations and inquiries about the other; of whom, however, could not be overlooked.

    Free Range VHDL

    This book is a fundamental guide to develop the skills ... The concept of using software to design hardware that is controlled by software will definitely provide you with endless hours of contemplation.

    数据库系统课程设计.txt

    数据库课程设计数据库课程设计数据库课程设计数据库课程设计

    外汇经纪CRM软件,全球前10强生产商排名及市场份额.docx

    外汇经纪CRM软件,全球前10强生产商排名及市场份额

    BS EN 60068-2-5-2011.pdf

    BS EN 60068-2-5-2011.pdf

    MS2磁化率系统操作手册

    MS2磁化率系统操作手册

    2016年美赛A~F题特等奖论文合集.pdf

    大学生,数学建模,美国大学生数学建模竞赛,MCM/ICM,历年美赛特等奖O奖论文

    自动化测试装置

    自动化测试装置

    大华网络硬盘录像机用户手册.pdf

    大华网络硬盘录像机用户手册

    大型民营企业数字化转型综合解决方案.pptx

    大型民营企业数字化转型综合解决方案.pptx

    2024年中国5G智能手机背光模组行业研究报告.docx

    2024年中国5G智能手机背光模组行业研究报告

    node-v8.15.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    海关商品编码/HS编码表

    用于海关申报商品编码/HS编码信息

    奥维互动地图软件安装包

    奥维互动地图软件安装包

    《统计与数据分析基础》02数据采集.pptx

    《统计与数据分析基础》02数据采集

    node-v9.11.2-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    BIM+ESE数字化:低碳园区智慧能源数字化管理解决方案.pptx

    BIM+ESE数字化:低碳园区智慧能源数字化管理解决方案.pptx

    node-v11.5.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    各城市-人口就业和工资数据(1978-2022年).xlsx

    样例数据及详细介绍:https://blog.csdn.net/li514006030/article/details/138510754

Global site tag (gtag.js) - Google Analytics