1038. 统计同成绩学生(20)
来源:互联网 发布:手机淘宝购物流程 编辑:程序博客网 时间:2024/06/09 23:05
1038. 统计同成绩学生(20)
题目
本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。
输入格式:
输入在第1行给出不超过10^5的正整数N,即学生总人数。随后1行给出N名学生的百分制整数成绩,中间以空格分隔。最后1行给出要查询的分数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔。
输出格式:
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。
输入样例:
10
60 75 90 55 75 99 82 90 75 50
3 75 90 88
输出样例:
3 2 0
思路
由于要查询多个成绩,我采用的是排序二分查找,但其实好像查找数据不大的话,直接遍历计数也没什么,没有测试有没有找大量查找,应该有的吧。。。
代码
#include <stdio.h>#include <stdlib.h>int stu[100000];int n,m;void instu(int score);int cmp(const void *a,const void *b){ return *(int*)a>*(int*)b;}int main(void){ int i,k,score; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&stu[i]); scanf("%d",&k); qsort(stu,n,sizeof(int),cmp); for(i=0;i<k;i++) { scanf("%d",&score); instu(score); } return 0;}void instu(int score){ int left=0,right=n-1; int count=0; while(left<=right) { int mid=left+(right-left)/2; if(score==stu[mid]) { int i=mid; while(stu[i]==score) if(i>0) i--; else break; if(i!=0)i++; while(stu[i]==score) { count++; if(i==n-1)break; i++; } break; } else if(score>stu[mid]) left=mid+1; else right=mid-1; } if(!m) { printf("%d",count); m=1; } else printf(" %d",count); return;}
阅读全文
0 0
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 【PAT】1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- 1038. 统计同成绩学生(20)
- poj1321——棋盘问题
- 杭电 1019 Least Common Multiple
- VR---虚拟现实
- MyEclipse2016破解过程
- COW写时拷贝---快照
- 1038. 统计同成绩学生(20)
- HDU-1087 Super Jumping! Jumping! Jumping! (线性dp 上升子序列最大和)
- 使用yum在CentOS下安装Nginx服务器
- ActiveMQ点对点模式(PTP)
- HDU-3572Task Schedule
- 数据结构——线性表的实现(增删部分)
- NLP12-Bayes与文本分类探讨
- MongoDB 主从模式
- GIT学习-04git-svn的使用