2E08-view-lists-Array(overlay)

Description

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.

Input

The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative
integers below 32,768, giving A’s elements in row-major order.

Output

Output the elements of S modulo m in the same way as A is given.

Sample Input

2 2 4
0 1
1 1

Sample Output

1 2
2 3

题解:
| A+A2+A3+……Ak |   |A   A| (k-1)次方   | A |
|                | = |     |              |   |
|     E          |   |0   E|              | E |

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

struct mat
{
    int t[65][65];
    void set()
    {
        memset(t,0,sizeof(t));
    }
} a,b;

mat multiple(mat a,mat b,int n,int p)
{
    int i,j,k;
    mat temp;
    temp.set();
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        {
            if(a.t[i][j]>0)
                for(k=0; k<n; k++)
                    temp.t[i][k]=(temp.t[i][k]+a.t[i][j]*b.t[j][k])%p;
        }
    return temp;
}

mat quick_mod(mat b,int n,int m,int p)
{
    mat t;
    t.set();
    for(int i=0;i<n;i++) t.t[i][i]=1;
    while(m)
    {
        if(m&1)
        {
            t=multiple(t,b,n,p);
        }
        m>>=1;
        b=multiple(b,b,n,p);
    }
    return t;
}
void init(int n,int m,int p)
{
    a.set();
    b.set();
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        scanf("%d",&b.t[i][j]);
        b.t[i][j+n]=b.t[i][j];
        a.t[i][j]=b.t[i][j];
    }
    for(int i=n;i<2*n;i++)
    for(int j=n;j<2*n;j++)
    if(i==j) b.t[i][j]=1;

    for(int i=n;i<2*n;i++)
    for(int j=0;j<n;j++)
    if(j+n==i) a.t[i][j]=1;

    b=quick_mod(b,2*n,m-1,p);

    mat temp;
    temp.set();
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
        {
                for(int k=0; k<2*n; k++)
                    temp.t[i][j]=(temp.t[i][j]+b.t[i][k]*a.t[k][j])%p;
        }
   for(int i=0;i<n;i++)
   {
       for(int j=0;j<n;j++)
       printf("%d ",temp.t[i][j]);
       puts("");
   }
}
int main()
{
    int n,m,p;
    while(cin>>n>>m>>p)
    {
        init(n,m,p);
    }
    return 0;
}

2E08-view-lists-Array(overlay),布布扣,bubuko.com

时间: 2024-10-13 15:23:52

2E08-view-lists-Array(overlay)的相关文章

23.Merge k Sorted Lists (Array; Sort)

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思路I: 选择排序 每次都比较各个list的头指针所指的val,取最小的那个.时间复杂度O(n2) Result:Time Limit Exceeded 思路II: 最小堆. 时间复杂度:堆排序其实也是一种选择排序.只不过直接选择排序中,为了从R[1...n]中选择最大记录,需比较n-1次,然后从R[

【IOS笔记】View Controller Basics

View Controller Basics   视图控制器基础 Apps running on iOS–based devices have a limited amount of screen space for displaying content and therefore must be creative in how they present information to the user. Apps that have lots of information to display

自定义View 之利用ViewPager 实现画廊效果(滑动放大缩小)

自定义View 之利用ViewPager 实现画廊效果(滑动放大缩小) 转载请标明出处: http://blog.csdn.net/lisdye2/article/details/52315008 本文出自:[Alex_MaHao的博客] 项目中的源码已经共享到github,有需要者请移步[Alex_MaHao的github] 基本介绍 画廊在很多的App设计中都有,如下图所示: 该例子是我没事的时候写的一个小项目,具体源码地址请访问https://github.com/AlexSmille/Y

[李景山php]每天laravel-20161115|View.php

<?php namespace Illuminate\View; use Exception; use Throwable; use ArrayAccess; use BadMethodCallException; use Illuminate\Support\Str; use Illuminate\Support\MessageBag; use Illuminate\Contracts\Support\Arrayable; use Illuminate\View\Engines\EngineI

Hive lateral view explode

select 'hello', x from dual lateral view explode(array(1,2,3,4,5)) vt as x 结果是: hello   1 hello   2 hello   3 hello   4 hello   5 来自为知笔记(Wiz)

maxcompute 2.0复杂数据类型之array

含义类似于Java中的array.有序.可重复. 场景什么样的数据,适合使用array类型来存储呢?这里列举了几个我在开发中实际用到的场景. 2.1 标签类的数据为什么说标签类数据适合使用array类型呢?(1)标签一般是一个只有key.没有value的结构:(2)标签的数量(枚举值个数)会非常多:(3)标签的变化会比较频繁:(4)标签会过期:因此,比起"创建多个字段"."使用指定分隔符分隔的字符串"."使用map"等方法,使用array是更合适

module/config/module.config.php文件内涵定义

'router'                     =>array(),// 路由 'controllers'              =>array(),// 控制器 'view_manager'       =>array(),// 视图管理器 'service_manager'       =>array(),// 服务器管理器 'translator'              =>array(),// 译码器或翻译器 'navigation'        

laravel 入门

Laravel5.0学习--01 入门 本文以laravel5.0.22为例. 生产环境建议使用laravel5.1版本,因为该版本是长期支持版本.5.1文档更详细:http://laravel-china.org/docs/5.1. 环境需求 Laravel5.0 框架有一些系统上的需求: PHP 版本 >= 5.4 Mcrypt PHP 扩展 OpenSSL PHP 扩展 Mbstring PHP 扩展 Tokenizer PHP 扩展 在 PHP 5.5 之后, 有些操作系统需要手动安装

ThinkPHP - 6 - 学习笔记(2015.5.4)

解决:OneThink 站点无法被友言uyan后台识别 打开友言uyan插件功能,但OneThink站点无法被友言uyan后台检测到.页面生成的uyan代码为: 1 <!-- UY BEGIN --> 2 <div id="uyan_frame"></div> 3 <script type="text/javascript" src="http://v2.uyan.cc/code/uyan.js?uid="

oc常见误区

1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获. 查看源码打印?