解说Codeforces Round #213 (diy.2) C.Matrix

来源:互联网 发布:淘宝buy功能哪里打开 编辑:程序博客网 时间:2024/05/22 13:08

  题目大意:

  用题目中的方法构造一个矩阵。

  然后求出矩阵中长方形的和等于a的长方形的数量

  思路:

  长方形的和 等于构成它的长的那些数字的和 加上构成它的宽的那些数字的和

  两个和的积

  比如第一个样例

  1 2 3 4 5

  2 4 6 8 10

  3 6 9 12 15

  4 8 12 16 20

  5 10 15 20 25

  自己去体会吧~~~哈哈

  那么我们枚举出来S可以凑出的数字

  然后行和列能凑出来的东西是一样的

  那么枚举出现过的东西 然后去凑出a

  当a==0的时候特判一下就Ok啦

  记得longlong

  [cpp] view plaincopy

在CODE上查看代码片
派生到我的代码片
#include

  #include

  #include

  #include

  #include

  #include

  #include

  typedef long long LL;

  using namespace std;

  LL cnt[40005];

  int main()

  {

  int m;

  char str[40005];

  LL t[40005];

  memset(cnt,0,sizeof(cnt));

  scanf("%d",&m);

  scanf("%s",str);

  for(int i=0;i<strlen(str);i++)< p="">

  t[i]=str[i]-'0';

  int len=strlen(str);

  for(int i=0;i<len;i++)< p="">

  {

  LL tot=0;

  for(int j=i;j<len;j++)< p="">

  {

  tot+=t[j];

  cnt[tot]++;

  }

  }

  LL ans=0;

  if(m==0)

  for(int i=0;i<40000;i++)

  ans+=cnt[0]*cnt[i];

  for(int i=1;i<=40000;i++)

  {

  if(m%i==0)

  {

  if(m/i<=40000 && m/i>=0)ans+=cnt[i]*cnt[m/i];

  }

  }

  //if(m==0)ans=len*cnt[0];

  printf("%I64d\n",ans);

  return 0;

  }

原创粉丝点击