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
",ssum);
37     return 0;
38 }
原文地址:https://www.cnblogs.com/hhxj/p/7168687.html