20170715



T2:

给定一个由数字(0-9)构成的字符串 s 。我们可以由此定义出 size(s) * size(s) 大小的矩阵 b ,其中 b[i][j] = s[i] * s[j] ;请问在这个矩阵 b 中,有多少子矩形满足其中的 b[i][j] 的和为另一个给定的数字 a 。

输入

10 
12345

输出

6
对 100% 的输入数据 :0≤a≤1000000000,size(s)≤4000 。


b矩阵为:
01 02 03 04 05  //发现 02 03  为(2+3)*(1+2)
02 04 06 08 10   04 06
03 06 09 12 15
04 08 12 16 20
05 10 15 20 25

f[i][j]为s第i为到第j为的和
子矩阵的和为 发 某个f[i][j]* 某个f[i][j]
先求f[i][j] ,统计f[i][j]出现的次数;
ans+=t(f[i][j])*(aim/f[i][j])    // aim为a

#include<bits/stdc++.h>
using namespace std;

int q[40005],aim;
int f[4005][4005];
int t[1000005]; //9*4000 f[i][j]最大为36000;
bool ex[1000005];

int hash(int k){
	int mod=1e6+7,i;
	i=(k*23)%mod;
	return i;
}

int main(){
//	freopen("rect.in","r",stdin);
//	freopen("rect.out","w",stdout);
	memset(q,0,sizeof(q));
	memset(f,0,sizeof(f));
	memset(t,0,sizeof(t));
	scanf("%d",&aim);
	char st[40005];
	scanf("%s",st+1);
	int len=strlen(st+1);
	for(int i=1;i<=len;++i) q[i]=st[i]-'0',f[i][i]=q[i];
	for(int i=1;i<=len;++i)
		for(int j=i+1;j<=len;++j)
			f[i][j]=f[i][j-1]+q[j];
	for(int i=1;i<=len;++i)
		for(int j=i;j<=len;++j){
        	if(f[i][j]==0) t[0]++;
        	if(f[i][j]>0)
				if(aim%f[i][j]==0)
					t[hash(f[i][j])]+=1;
		}
	long long ans=0;
	if(aim!=0)	
	for(int i=1;i<=aim;++i){
			if(aim%i==0){
				int k=aim/i;
				ans=ans+(long long)t[hash(i)]*t[hash(k)];
			}
	}
	else {
		ans=ans+(long long)t[0]*len*(len+1)-(long long)t[0]*t[0];//0出现的次数*总数()*2- 0出现的次数*0出现的次数
											//总数为len*(len+1)/2 
		cout<<ans;
		return 0;
	}
	cout<<ans;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值