zoukankan      html  css  js  c++  java
  • 矩阵的价值

    1008: QAQ的矩阵价值 [思维]

    时间限制: 1 Sec 内存限制: 128 MB

    提交: 37 解决: 12 

    题目描述

    QAQ有一个这样的矩阵序列(假定我们用二维数组a[][]

    来记录该序列):

    n = 1    n = 2    n = 3    n = 4      n = 5        n = ...
    1        1 2      1 2 3    1 2 3 4    1 2 3 4 5    
             1 1      1 2 2    1 2 3 3    1 2 3 4 4    
                      1 1 1    1 2 2 2    1 2 3 3 3    ......
                               1 1 1 1    1 2 2 2 2
                                          1 1 1 1 1


    QAQ定义矩阵元素a[i][j]

    的价值 = a[i][j]10nj


    QAQ定义一个矩阵的价值为矩阵中所有元素价值之和。


    为了增加难度,QAQ将该矩阵序列变成两个不同的矩阵序列:(如n=5时)

        一                   二
    1 0 0 0 0            0 0 0 0 5
    1 2 0 0 0            0 0 0 4 4
    1 2 3 0 0            0 0 3 3 3
    1 2 2 2 0            0 2 2 2 2
    1 1 1 1 1            1 1 1 1 1

    对于上面给出的三个矩阵,请你分别求出它们的价值ans0ans1ans2

    注:矩阵的行列下标均是1n

    输入

    第一行输入一个整数T

    ,代表有T组测试数据。
    每组数据输入一个整数n,代表矩阵序列是nn的。
    注:1<=T<=100001<=n<=100000

    。 

    输出

    对每组数据,输出三个整数ans0ans1ans2

    ,中间用空格隔开,最后一个数后面没有空格。

    由于结果很大,请对(109+7)

    取余。

    样例输入

    5
    1
    3
    5
    100
    5000

    样例输出

    1 1 1
    356 331 136
    60355 57631 13715
    311833527 324678596 120264545
    770817050 915988694 926824673

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    typedef long long LL;
    
    const LL mod = 1000000000 + 7;
    const LL maxn = 100011;
    int main()
    {
        LL ans0[maxn],ans1[maxn],ans2[maxn];
        LL one[maxn],add[maxn];
        LL sum = 1,ss = 1;
        ans0[1] = 1, ans1[1] = 1, ans2[1] = 1;
        one[1] = 1; add[1] = 1;
        for(int i = 2; i <= maxn; i++)
            one[i] = (one[i - 1]*10 + 1)%mod;
        for(int i = 2; i <= maxn; i++)
        {
            int a;
            if(i % 2 == 0)
                a = i /2;
            else a = i / 2 + 1;
            add[i] = (add[i - 1]*10)%mod + one[a]%mod;
            sum = (sum + i)%mod;
            ss = (ss*10%mod + i)%mod;
            ans0[i] = (ans0[i - 1]*10%mod + sum + ss - i)%mod;
            ans1[i] = (ans1[i - 1]*10%mod + add[i])%mod;
            ans2[i] = (ans2[i - 1]*10%mod + sum)%mod;
        }
        int t;
        scanf("%d",&t);
        while(t--)
        {
           int n;
           scanf("%d",&n);
           printf("%lld %lld %lld
    ",ans0[n],ans1[n],ans2[n]);
        }
        return 0;
    }
  • 相关阅读:
    some tips
    ORA00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
    Chapter 01Overview of Oracle 9i Database Perfomrmance Tuning
    Chapter 02Diagnostic and Tuning Tools
    变量与常用符号
    Chapter 18Tuning the Operating System
    标准输入输出
    Trace files
    DBADeveloped Tools
    Chapter 03Database Configuration and IO Issues
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6546849.html
Copyright © 2011-2022 走看看