Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)C. Jury Marks
题意:有一个初始分值,按时间给出K个评委给的分数,+或者减,然后有n个在这期间出现过的分数,问初始分值可能是
思路:得出k的前缀和,由n[i]可以得到他可能存在的初值即n[i]--(k[1]~k[k]),然后看n[1]的那些可能的初值是否也在(n[2]~n[n]中出现
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 set<int > a[2004]; 5 map<int ,int >ma; 6 int b[2004]; 7 int c[2004]; 8 int main(){ 9 int n,k; 10 int xx; 11 scanf("%d%d",&n,&k); 12 for(int i=1;i<=n;i++){ 13 scanf("%d",&xx); 14 b[i]=xx+b[i-1]; 15 } 16 for(int i=1;i<=k;i++){ 17 scanf("%d",&c[i]); 18 } 19 for(int i=1;i<=k;i++){ 20 for(int j=1;j<=n;j++){ 21 a[i].insert(c[i]-b[j]); 22 } 23 } 24 int ssum=0; 25 26 for(set<int >::iterator it=a[1].begin();it!=a[1].end();it++){ 27 int x=*it; 28 int sum=0; 29 for(int j=2;j<=k;j++){ 30 if(a[j].count(x)) sum++; 31 } 32 if(sum==k-1) { 33 ssum++; 34 } 35 } 36 printf("%d\n",ssum); 37 return 0; 38 }