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;
    }
  • 相关阅读:
    接口开发中的 RestTemplate 传参问题
    逆流成河:五年软件开发生涯
    .NET Web开发技术简单整理
    2011-05-29 21:48 VS.NET2010水晶报表安装部署[VS2010]
    WPF 基础到企业应用系列3——WPF开发漫谈
    C# WinForm开发系列
    接口和委托的区别
    通过jquery触发select自身的change事件
    php去掉字符串中的最后一个字符和汉字
    Go语言学习之数据类型
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6546849.html
Copyright © 2011-2022 走看看