HDU’14‘11’校赛 考试晋级

#include
void quick(int *a,int i,int j)
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; 
do {
while(a[m]k&&n>i) n--; 
if(m<=n) { 

temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n--;
}
}while(m<=n);
if(mi) quick(a,i,n);
}

int main()
{
 int t,n,k,i,j,s[10010],g,h,temp,z;
 while(~scanf("%d",&t))
 {
  s[0]=9999;
  for(i=1;i<=t;i++)
  { 
  scanf("%d%d",&n,&k);
  for(j=1;j<=n;j++)
   scanf("%d",&s[j]);
  quick(s,1,n);
  int flag=0;  
  if(s[n-k]==s[n-k+1])
   {
     flag=1;
       for(j=n-k+1;j<=n;j++)
       {           
        if(s[j]!=s[j+1])break;
        else flag++;
       }
   }
  if(flag==k)printf("Case #%d: %d %d\n",i,-1,-1);
  else {k=k-flag;
  printf("Case #%d: %d %d\n",i,k,s[n-k+1]);}
  }
 }
 return 0;
}

考试晋级

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 0 Accepted Submission(s): 0


Problem Description
 
   
有n个人参加了期末考试,为了检测大家真正的学习成绩老师决定对于成绩好的同学进行第二轮测试,当然不是每个人都有进入第二轮的机会,这里有个根据期末考试分数制定的晋级规则: 1)分数高的优先晋级 2)至多只能允许k个人晋级下一轮 3)为了保证公平分数相同的人要么一起晋级要么一起出局 老师最近很忙不知道最终到底有多少人可以晋级下一轮而且晋级的最低分数是多少.作为优秀的程序员这个任务当然就交给你来完成了!

Input
 
   
第一行是一个数T(T<=100),表示有T组测试数据。 每组测试样例的第一行是两个数n 和k(1<=k<=n<=10000)代表参加考试的总人数和至多能晋级的总人数. 然后接下来一行有n个数字s代表每个学生的考试分数(1<=s<=100).

Output
 
   
对于每组测试数组,首先输出"Case #X: ",X代表测试用例的编号(具体可参见sample output), 然后输出两个整数sum, min,表示可以晋级多少人和最低的晋级分数.如果无人能晋级则输出两个-1。

Sample Input
 
   
3 1 1 5 10 7 1 2 3 4 5 6 7 8 9 10 10 2 1 1 2 3 3 4 4 5 5 5

Sample Output
 
   
Case #1: 1 5 Case #2: 7 4 Case #3: -1 -1

你可能感兴趣的:(HDU’14‘11’校赛 考试晋级)