PAT1038 统计同成绩学生 (20分)

本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:

输入在第 1 行给出不超过 1 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 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 main()
{
	int n;
	while (cin >> n)
	{
		int* a = new int[n];
		for (int i = 0; i < n; i++)
			cin >> a[i];
		sort(a, a + n);
		int m;
		cin >>m;
		int* b = new int[m];
		for (int i = 0; i < m; i++)
			cin >> b[i];
		int low, mid, high,count;
		for (int i = 0; i < m; i++)
		{
			low = 0; high = n - 1;
			count = 0;
			while (low <= high)
			{
				mid = (low + high )/ 2;
				if (a[mid] == b[i])
				{
					count++;
					int z = mid - 1;
					int t = mid + 1;
					while (z>=0&&a[z] == b[i])
					{
						count++;
						z -= 1;
					}
					while (t<=n-1&&a[t] == b[i])
					{
						count++;
						t += 1;
					}
					break;
				}
				else if (a[mid] < b[i])
					low = mid + 1;
				else
					high = mid - 1;
			}
			if (i != 0)
				cout << ' ' << count;
			else
				cout << count;
		}
		delete[]a;
		delete[]b;
		cout << endl;
	}
	return 0;
}
排序加二分查找,注意不要数组越界,这种解法没有超时,
下一个hash解法在时间复杂度要求比较高的地方可能会超时
#include<iostream>//hash法
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		int a[101] = {0};
		int x;
		while (n--)
		{
			cin >> x;
			a[x]++;
		}
		int k;
		cin >> k;
		for(int i=0;i<k;i++)
		{
			int y;
			cin >> y;
			if (i != 0)
				cout << " " << a[y];
			else
				cout << a[y];
		}
		cout << endl;
	}
	return 0;
}




代码学习笔记 文章被收录于专栏

学习笔记,pat,牛客

全部评论

相关推荐

感觉这一周太梦幻了,就像一个梦,很不真实~~~感觉这个暑期,我的运气占了99成,实力只有百分之一4.15上午&nbsp;腾讯csig&nbsp;腾讯云部门,面完秒进入复试状态4.16下午&nbsp;美团优选供应链部门,4.18上午发二面4.17晚上&nbsp;阿里国际一面,纯拷打,面完我都玉玉了4.18下午&nbsp;阿里国际二面,是我们leader面的我,很轻松~~4.18晚上&nbsp;约了hr面4.19上午&nbsp;hr面,下午两点口头oc4.19晚上&nbsp;意向书说起来我的暑期好像一次都没挂过~~~~~难道我是天生面试圣体?----------------------------------------------------------------------六个月前,我还是0项目0刷题,当时想的是先把论文发出来再去找实习。结果一次组会,老师打破了我的幻想(不让投B会,只让投刊或者A)我拿头投啊!!!然后就开始物色着找实习,顺便做完了mit的6.s081,但是基本上还是没刷过题目-----------------------------------------------------------------------11月&nbsp;&nbsp;一次偶然的机会,面进了某个耳机厂的手环部门,大概是做嵌入式的,用的是CPP。12月&nbsp;莫名其妙拿到了国创的面试机会,0基础四天速成java基础!居然也给我面过了hhhhh,可能是面试没写题吧入职国创后的几个月,一直没活,天天搁那看剧,都快忘了还有暑期实习这回事了~~~~命运的齿轮在2.26开始转动,因为这一天美团开了,我开始慌了,因为那时的我什么都不会。lc,八股,sql全部是0进度。然后就开始了女娲补天,上班刷题,下班继续做之前的开源,顺便学一学八股。3月到现在,lc也刷到快200了,一天最多提交了47次~~~~~~~~~~八股根据别人的面经总结和博客,写了快十万字的笔记~~~~~~~~~~简历上的实习经历和开源,也努力去深挖了,写了几万字的记录~~~~~~所以面试的时候,基本上都能cover了,面试官问到的基础基本都会,不基础的我就把他往我会的地方引。结果好像还不错,基本上每个面试官评价都挺好的emmmmmmmm
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务