1038. 统计同成绩学生(20)
来源:互联网 发布:三维软件 编辑:程序博客网 时间:2024/06/08 05:38
本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。
输入格式:
输入在第1行给出不超过105的正整数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 <iostream>#include <algorithm>using namespace std;int BinarySearch(int* data, int n, int score) { int left = 0, right = n - 1; int mid = 0; while(left <= right) { mid = (left + right) >> 1; if(score < data[mid]) right = mid - 1; else if(score > data[mid]) left = mid + 1; else break; } int num = 0; if(data[mid] == score) { //如果能找到同分的,开始左右找同一分数并确定个数;否则返回0个 for(int i = mid; i < n && data[i] == score; ++i) ++num; for(int i = mid - 1; i >= 0 && data[i] == score; --i) ++num; } return num; } int main(){ int num; cin>>num; int grade[num]; for ( int i = 0 ; i < num ; i++){ cin>>grade[i]; } sort(grade,grade+num); int searchnum; cin>>searchnum; int searchgrade[searchnum]; int cnt[searchnum] = {0}; for ( int i = 0 ; i < searchnum ; i++){ cin>>searchgrade[i]; cnt[i] = BinarySearch(grade, num, searchgrade[i]); } cout<<cnt[0]; for ( int i = 1 ; i < searchnum ; i++){ cout<<" "<<cnt[i]; } return 0; }
1 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)
- PLSQL Dynamic SQL one row result
- UVa 455 Periodic Strings 【字符串求周期】
- Python socket编程
- Leetcode 108. Convert Sorted Array to Binary Search Tree
- Java笔记->ExecutorService 的理解与使用
- 1038. 统计同成绩学生(20)
- 【cf 487C】【数论+构造】【根据前缀积取模构造序列】
- 1039. 到底买不买(20)
- go语言快速入门:流程控制(7)
- iOS中解决后台返回的null导致的崩溃问题
- 1040. 有几个PAT(25)
- 高并发简单解决方案-redis缓存队列+mysql 批量入库+php离线整合
- 【CodeForces】343D Water Tree
- 【BZOJ 1180】[CROATIAN2009]OTOCI LCT