zoukankan      html  css  js  c++  java
  • Codeforces 365C

    题意:给定你一个数串s,再给你一个 a ,问你在矩阵d(第i,j个元素为si*sj)有多少个小矩形的和为a

    解题思路:可知  a = (s[x] + s[x+1] + ....s[y])* (s[p]+s[p+1]+....s[q]);    我们只需要枚举各字串的和以及其个数就可以得到所求小矩形的个数

    解题代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 char a[4005];
     4 __int64 b[4005];
     5 __int64 hs[40005];
     6 __int64 sum[4005];
     7 int main()
     8 {
     9     __int64 k ;
    10     scanf("%I64d",&k);
    11     scanf("%s",a);
    12     memset(hs,0,sizeof(hs));
    13     __int64 len = strlen(a);
    14     for(__int64 i= 0 ;i < len ;i ++)
    15     {
    16         b[i+1] = a[i] - '0';
    17     }
    18     sum[0] = 0 ;
    19     sum[1] = b[1];
    20     for(__int64 i = 1;i <= len;i ++)
    21         sum[i] = sum[i-1] + b[i];
    22 
    23     for(__int64 i = 0;i <= len;i ++)
    24         for(__int64 j = i+1; j<= len ; j ++ )
    25         {
    26             hs[sum[j] - sum[i]] ++;
    27         }
    28 
    29     //  printf("%I64d %I64d
    ",hs[0],hs[1]);
    30         __int64 ans = 0 ;
    31         if(k != 0 ){
    32             for(__int64 i = 1;i <= 40000;i ++)
    33             {
    34                 if(k % i == 0  &&  (k / i) <= 40000)
    35                     ans += hs[i] * hs[k/i];
    36             }
    37         }
    38         else
    39         {
    40             ans = hs[0] *hs[0];
    41             for(int i = 1 ;i <= 40000;i ++)
    42                 ans += hs[i]*hs[0]*2;
    43 
    44         }
    45         printf("%I64d
    ",ans);
    46         return 0;
    47 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    echo -e的用法
    nc ip 22
    /pentest/backdoors/3proxy
    /usr/local/sbin/arpspoof
    tcpick
    nginx服务报403错误的解决方法
    linux上部署thinkphp5提示500
    修改文件夹的所有者为www
    Host xxx is not allowed to connect to this MariaDb server
    解决Linux 下 root用户删除文件提示:Operation not permitted
  • 原文地址:https://www.cnblogs.com/zyue/p/3434319.html
Copyright © 2011-2022 走看看