{CF831}

CF831

C  Jury Marks

对于任意一个b,肯定是某一个裁判打分后的结果。先由此求出所有可能的初始分数,再判断是否满足其它的b值。

 1 #include <cstdio>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 
 5 int a[2010],b[2010],sum[2010];
 6 int n,k;
 7 set<int> s2,s3;
 8 
 9 int main()
10 {
11     scanf("%d%d",&n,&k);
12     for(int i=1;i<=n;i++)
13     {
14         scanf("%d",&a[i]);
15         sum[i]=sum[i-1]+a[i];
16     }
17     for(int i=0;i<k;i++)
18     {
19         scanf("%d",&b[i]);
20     }
21     for(int i=1;i<=n;i++) s2.insert(b[0]-sum[i]);
22     int cnt=s2.size();  //!!!
23     set<int>::iterator it2;
24     for(it2=s2.begin();it2!=s2.end();it2++)
25     {
26         s3.clear();
27         for(int i=1;i<=n;i++) s3.insert(*it2+sum[i]);
28         for(int i=0;i<k;i++) if(!s3.count(b[i])) {
29             cnt--;
30             break;
31         }
32     }
33     printf("%d\n",cnt);
34 }
View Code

 

 

Office Keys

首先要清楚一个事实,选取的钥匙一定是连续的n个钥匙

然后暴力第一把钥匙,更新最小值。

又被long long 坑了一把。。。

 1 #include <cstdio>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 #define LL long long
 5 const int maxn=1010;
 6 int p[maxn],k[maxn<<1];
 7 int n,m,d;
 8 
 9 int main()
10 {
11     scanf("%d%d%d",&n,&m,&d);
12     for(int i=0;i<n;i++) scanf("%d",&p[i]);
13     for(int i=0;i<m;i++) scanf("%d",&k[i]);
14     sort(p,p+n);
15     sort(k,k+m);
16     LL ans=1e18,temp;
17     for(int i=0;i+n-1<m;i++)
18     {
19         temp=0;
20         for(int j=0;j<n;j++)
21         {
22             LL r=abs(p[j]-k[i+j])+abs(k[i+j]-d);
23             temp=temp>r?temp:r;
24         }
25         ans=ans<temp?ans:temp;
26     }
27     printf("%lld\n",ans);
28 }
View Code

 

posted @ 2017-07-15 23:30  yijiull  阅读(578)  评论(0)    收藏  举报