FZU Problem 1692 Key problem(循环矩阵)

Posted jzdwajue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FZU Problem 1692 Key problem(循环矩阵)相关的知识,希望对你有一定的参考价值。

循环矩阵,这里有解说:http://wenku.baidu.com/link?

url=zcJ-sxrj0QDqzz8xCnHTnB7gxjoNRyOZzS4_4ZA22c8Bs9inYn6vVkqTVr_w-riLa8oRnYA9SRcCZ9f4UciCUNGeNAG4dCGclYRPS18YLGa

推出第一层以下依据性质就能够得到。

Problem 1692 Key problem

Accept: 144    Submit: 663
Time Limit: 1000 mSec    Memory Limit : 32768 KB

技术分享 Problem Description

Whenever rxw meets Coral, he requires her to give him the laboratory key. Coral does not want to give him the key, so Coral ask him one question. if rxw can solve the problem, she will give him the key, otherwise do not give him. rxw turns to you for help now,can you help him?
N children form a circle, numbered 0,1,2, ... ..., n-1,with Clockwise. Initially the ith child has Ai apples. Each round game, the ith child will obtain ( L*A(i+n-1)%n+R*A(i+1)%n ) apples. After m rounds game, Coral would like to know the number of apples each child has. Because the final figure may be very large, so output the number model M.

技术分享 Input

The first line of input is an integer T representing the number of test cases to follow. Each case consists of two lines of input: the first line contains five integers n,m,L,R and M . the second line contains n integers A0, A1, A2 ... An-1. (0 <= Ai <= 1000,3 <= n <= 100,0 <= L, R <= 1000,1 <= M <= 10 ^ 6,0 <=m < = 10 ^ 9). After m rounds game, output the number model M of apples each child has.

技术分享 Output

Each case separated by a space. See sample.

技术分享 Sample Input

1 3 2 3 4 10000 1 2 3

技术分享 Sample Output

120 133 131

技术分享 Source

FOJ月赛-2009年3月--- Coral
#include <set>
#include <map>
#include <queue>
#include <math.h>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>

#define eps 1e-8
#define pi acos(-1.0)

#define LL __int64

using namespace std;


const int maxn = 110;

LL a[maxn], b[maxn], f[maxn];

LL mod, n;

void mul(LL a[], LL b[])
{
    LL c[maxn];
    memset(c, 0, sizeof(c));
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++) c[i] = (a[j]*b[(i-j+n)%n]+c[i])%mod;
    memcpy(a, c, sizeof(c));
}

void pow_mod(LL a[], LL b)
{
    LL c[maxn];
    memset(c, 0, sizeof(c));
    c[0] = 1LL;
    while(b)
    {
        if(b&1) mul(c, a);
        mul(a, a);
        b >>= 1;
    }
    memcpy(a, c, sizeof(c));
}

int main()
{
    int T;
    cin>>T;
    LL m, l, r;
    while(T--)
    {
        cin>>n>>m>>l>>r>>mod;
        for(int i = 0;i < n;i++)  cin>>a[i];
        memset(f, 0, sizeof(f));
        f[0] = 1; f[1] = r; f[n-1]=l;
        pow_mod(f, m);
        LL ans[maxn];
        for(int i = 0; i < n; i++)
        {
            ans[i] = 0;
            for(int j = 0;j < n;j++)
                ans[i] = (ans[i]+a[j]*f[(i-j+n)%n])%mod;
        }
        cout<<ans[0];
        for(int i = 1; i < n; i++) cout<<" "<<ans[i];
        cout<<endl;
    }
    return 0;
}





以上是关于FZU Problem 1692 Key problem(循环矩阵)的主要内容,如果未能解决你的问题,请参考以下文章

FZU-2214 Knapsack problem

(01背包 当容量特别大的时候) Knapsack problem (fzu 2214)

FZU-2218 Simple String Problem

FZU Problem 1853 Number Deletion

FZU - 2037 -Maximum Value Problem(规律题)

FZU Problem 2168 防守阵地 I