题目大意:
用题目中的方法构造一个矩阵。
然后求出矩阵中长方形的和等于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
#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;
}