zoukankan      html  css  js  c++  java
  • FJUT OJ 2473 求和(同余)

    有一个n*n的仅有数字组成的矩阵,每一个元素都是0~9的数字。

    比如

    123

    456

    789

    每一行,可以获得字符串

    每一列,可以获得一个字符串

    列出这些字符串的所有子串

    把这些子串当成一个整数,然后全部加起来。

    求计算结果。

    例如第一行,可以获得1、2、3、12、23、123

    第一列可以获得1、4、7、14、47、147

    Input

    多组测试数据

    每组测试数据的第一行是一个n (1<=n<=1000)

    接下来n行是矩阵。

    Output

    输出结果模1,000,000,007(1e9+7)。

    SampleInput
    3
    123
    456
    789
    
    SampleOutput
    2784

    分析:

     根据取模运算具有如下性质

      (a*b)%c = ((a%c)*(b%c))%c

      (a+b)%c = ((a%c)+(b%c))%c

    我们可以把这些字符串组成的数拆开来看。。

    比如样例中第一行1、2、3、12、23、123,拆出1,10,100,2,2,20,20,3,3,3,这样的话,

    第一位1,因为要作为组成数的个位,十位和百位,所以是1*(111)

    第二位2,要作为数的个位和十位,而前面有一个数,所以是2*2*11;

    第三位3,作为个位,前面有两个数,所以是3*1

    这样我们就可以得到每个数对于整体的贡献,计算每个数的贡献取模求和,即为最后的结果。

    代码如下:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long LL;
    const LL MOD=1e9+7;
    LL sum[1100];
    char map1[1100][1100];
    void init()
    {
        sum[1]=1;
        for(int i=2;i<=1005;i++)
        {
            sum[i]=(sum[i-1]*10%MOD+1)%MOD;
        }
    }
    int main()
    {
         ios::sync_with_stdio(false);
         init();
         LL n;
         LL ans=0;
         while(cin>>n)
         {
             ans=0;
           for(int i=1;i<=n;i++)
             for(int j=1;j<=n;j++)
               cin>>map1[i][j];
           for(int i=1;i<=n;i++)
             for(int j=1;j<=n;j++)
             {
                 ans=(ans+sum[n-j+1]*(map1[i][j]-'0')%MOD*j%MOD)%MOD;
                 ans=(ans+sum[n-i+1]*(map1[i][j]-'0')%MOD*i%MOD)%MOD;
             }
             cout<<ans<<endl;
         }
        return 0;
    }
  • 相关阅读:
    20201206贪心法1总结
    20201105枚举课后总结
    【题解】P1057 传球游戏
    人生哲理100句整理
    [计蒜客]棋子等级 题解
    整式的乘法相关公式(随着后续学习持续更新)
    计算几何公式(随着后续学习持续更新)
    mybatis中foreach在不同场景下的使用整理
    Java导出Excel文件详解
    java单元测试
  • 原文地址:https://www.cnblogs.com/a249189046/p/8445647.html
Copyright © 2011-2022 走看看