http://codeforces.com/contest/831/problem/C
有一个人,他有一个初始分数,然后是m个评委,给他的分数(可正可负),然后再给你n个数,每个数都是积分过程的分数,问你初始解有多少种可能。
#include <bits/stdc++.h>
using namespace std;
const int maxn=4000007;
int main()
{ int sum[maxn];
int a[maxn];
int k[maxn];
bool vis[maxn];
int m,n;
scanf("%d%d",&m,&n);
vector<int>q;
sum[0]=0;
for(int i=1;i<=m;i++){
scanf("%d",&a[i]);
sum[i]=a[i]+sum[i-1];
}
sort(sum+1,sum+m+1);
int len=unique(sum+1,sum+1+m)-(sum+1);
for(int i=0;i<n;i++)
scanf("%d",&k[i]);
for(int i=0;i<n;i++)
for(int j=1;j<=len;j++)
q.push_back(k[i]-sum[j]);
map<int,int>mp;
for(int i=0;i<q.size();i++)
mp[q[i]]++;
int all=0;
for(int i=0;i<q.size();i++)
if(mp[q[i]]>=n)
{all++;mp[q[i]]=0;}
printf("%d\n",all);
return 0;
}