您的位置:首页 > 其它

CSU-ACM2017暑期训练1-Debug与STL Jury Marks-set判重

2017-07-24 20:14 477 查看
题目:


C. Jury Marks




time limit per test 2
seconds


memory limit per test     256
megabytes



Polycarp watched TV-show wherek jury
members one by one rated aparticipant by adding him a certain number of points (may be negative,i. e. points were subtracted). Initially the participant had some score,and each the marks were one by one added to his score. It is known that thei-th
jury member gave ai points.

Polycarp does not remember how many points the participant hadbefore this k marks
were given, but he remembers that among the scoresannounced after each of thek judges
rated the participant there were n (n ≤ k)
values b1, b2, ..., bn (it
is guaranteed that allvalues bj are
distinct). It ispossible that Polycarp remembers not all of the scores announced, i. e.n < k.
Note that the initial score wasn't announced.

Your task is to determine the number of options for the scorethe participant could have before the judges rated the participant.

Input

The first line contains two integersk and n (1 ≤ n ≤ k ≤ 2 000)
—the number of jury members and the number of scores Polycarp remembers.

The second line containsk integers a1, a2, ..., ak ( - 2 000 ≤ ai ≤ 2 000)
— jury's marks in chronological order.

The third line containsndistinct integers b1, b2, ..., bn ( - 4 000 000 ≤ bj ≤ 4 000 000)
— the values of points Polycarp remembers. Note that thesevalues are not necessarily given in chronological order.

Output

Print the number of options for the score the participant could have before thejudges rated the participant. If Polycarp
messes something up and there is nooptions, print "0"(without
quotes).

Examples

Input

4 1

-5 5 0 20

10

Output

3

Input

2 2

-2000 -2000

3998000 4000000

Output

1

Note

The answer for the first example is3 because
initially the participantcould have  - 10,10 or 15 points.

In the second example there is only one correct initial score equaling to4 002 000.

 


题目大意:

给你一串评委给打的分,再给你一串中间分值(由初始分值加上某前一段评委打的分算得),问你初始分值有多少种可能?

思路:

随便取一个中间分值,与所有的评委打分的时间点枚举算初始分,再用set判重法来判断这个初始分数能不能满足其他的中间分值,注意判断所得初始分结果有没有重复。因为由一个中间分值和各个节点枚举出来的初始分可能重复。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
using namespace std;

int n,k,sco,ans;
int a[2222],b[2222];
set<int>s;
set<int>score;

int judge(int t)
{
s.erase(s.begin(),s.end());
for(int i=0;i<k;i++)
{
s.insert(sco+a[i]);
}
for(int i=0;i<n;i++)
{
if(s.find(b[i])==s.end())
return 0;
}
return 1;
}

int main()
{
while(scanf("%d%d",&k,&n)!=EOF)
{
score.erase(score.begin(),score.end());
ans=0;
for(int i=0;i<k;i++)
{
scanf("%d",&a[i]);
if(i)
a[i]+=a[i-1];
}
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
}
for(int i=0;i<k;i++)
{
sco=b[0]-a[i];
if(score.find(sco)==score.end()&&judge(i))
{
score.insert(sco);
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm stl