CodeForces 222D Olympiad : 给出所有学生两轮考试分数,某人两轮分数和>=k,求可能的最高和最低名次:思维&贪心

最高就是第一名=

最低的话贪心,一轮从大到小,另一轮从小到大,尺取最多即最多能有多少个>=k

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[100005],b[100005];
 6 int main()
 7 {
 8   int n,i,j,ans,x;
 9   scanf("%d%d",&n,&x);
10   for (i=1;i<=n;i++) scanf("%d",&a[i]);
11   for (i=1;i<=n;i++) scanf("%d",&b[i]);
12   sort(a+1,a+n+1);
13   sort(b+1,b+n+1);
14   ans=0; j=1;
15   for (i=n;i>=1;i--)
16   {
17     while (j<=n&&a[i]+b[j]<x) j++;
18     if (j>n) break;
19     else j++,ans++;    
20   }
21   printf("1 %d\n",ans);
22   return 0;
23 }
View Code

题目链接:http://codeforces.com/problemset/problem/222/D

posted on 2015-03-25 20:08  xiao_xin  阅读(273)  评论(0编辑  收藏  举报

导航