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 }