zoukankan      html  css  js  c++  java
  • Codeforces Round#213(div.2)

    C.Matrix 

    题意:

    输入a和s。 s是只包含数字的字符串,b是一个矩阵,矩阵内的元素满足bij=si*sj。查找有多少个子矩阵,能满足这个子矩阵内的所有元素和为a。

    思路:

    注意一点: 

    子矩阵的横坐标、纵坐标上的数分别为(x,y,z,...)、(a,b,c,...),则子矩阵内元素和等于(a+b+c+...) * (x+y+z+...)。

    由这点可将问题转化为求有多少种情况,令m*n==a。而m、n来自s的子串内digit之和。 

    因此枚举s的所有连续子串,保存下所有子串内digit和及个数。

    当a不等于0时,枚举a的因子。

    当a等于0时,只考虑num[0]。

    PS:重复计算的情况为当横纵两数相等时 。

    参考:http://blog.csdn.net/softshell/article/details/16838623

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 
     5 #define N 40000
     6 #define M 4010
     7 long long num[N], digit[M];
     8 char s[M];
     9 
    10 int main()
    11 {
    12     long long a;
    13     cin >> a >> s;
    14     int len = strlen(s);
    15     for(int i=0; i<len; i++)
    16     {
    17         digit[i+1] = s[i] - '0';
    18     }
    19     memset(num, 0sizeof(num));
    20     long long zero = 0;
    21     for(int i=1; i<=len; i++)
    22     {
    23         long long temp = 0;
    24         for(int j=i; j<=len; j++)
    25         {
    26             temp += digit[j];
    27             num[temp]++;
    28             zero++;
    29         }
    30     }
    31     long long ans = 0;
    32     //重复计算的情况为当横纵两数相等时
    33     if(a==0)
    34     {
    35         ans = num[0] * zero * 2 - num[0]*num[0];
    36     }
    37     else
    38     {
    39         for(int i=1; i*i<=a; i++)
    40         {
    41             if(num[i]>0 && a/i<=N && a%i==0)
    42             {
    43                 if(i * i == a)
    44                     ans += num[i] * num[i];
    45                 else
    46                     ans += num[i] * num[a/i] * 2;
    47             }
    48         }
    49     }
    50     cout << ans << endl;
    51     return 0;
    52 }
    View Code 
  • 相关阅读:
    MAC配置DNS服务器
    真机IOS8.3以上的文件夹共享
    appium + python的环境配置_windows
    python 的时间与日期
    sublimetext 2 编译文件带input时 提示 EOFError: EOF when reading a line
    cmd无法输入中文解决方案
    配置python学习环境遇到的问题:[Decode error
    monkey初接触
    Android logcat输出中文乱码
    运行 命令框不记录打过的命令,重启后CMD里面是空的.上次打过的命令消失了.
  • 原文地址:https://www.cnblogs.com/byluoluo/p/3434554.html
Copyright © 2011-2022 走看看