首页 > 学院 > 开发设计 > 正文

#1475 : 数组分拆

2019-11-06 07:11:44
字体:
来源:转载
供稿:网友
时间限制:10000ms单点时限:1000ms内存限制:256MB

描述

小Ho得到了一个数组作为他的新年礼物,他非常喜欢这个数组!

在仔细研究了几天之后,小Ho成功的将这个数组拆成了若干段,并且每段的和都不为0!

现在小Ho希望知道,这样的拆分方法一共有多少种?

两种拆分方法被视作不同,当且仅当数组断开的所有位置组成的集合不同。

输入

每组输入的第一行为一个正整数N,表示这个数组的长度

第二行为N个整数A1~AN,描述小Ho收到的这个数组

对于40%的数据,满足1<=N<=10

对于100%的数据,满足1<=N<=105, |Ai|<=100

输出

对于每组输入,输出一行Ans,表示拆分方案的数量除以(109+7)的余数。

样例输入
51 -1 0 2 -2样例输出

5

#include <iostream>#include <algorithm>#include <vector>#include <unordered_map>using namespace std;const int mod = 1000000007;int main(){	freopen( "/home/liyuanshuo/ClionPRoject/hihocoder8/in.in", "r", stdin);	int n;	cin>>n;	vector<int> f( n, 0 );	f[0] = 1;	unordered_map<int , int > m;	m.insert(make_pair(0,1));	int s = 0, ss = 1;	for (int i = 0 ; i < n ; ++i)	{		int x;		cin>>x;		s += x;		f[i] = ( ss - m[s] + mod ) % mod;		if ( m.count(s) )			m[s] = ( m[s] + f[i] ) % mod;		ss = ( ss + f[i] ) % mod;	}	cout<<f[n-1]<<endl;	return 0;}


上一篇:eval_api_类中类_map

下一篇:POJ 3617 (贪心)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表