2021.12.11模拟总结
今天进行了第二次模拟,总的来说表现还可以。最后九道题得分:560.
头一次用996,可以实时看到每道题得分,雀食不错。
排序的专题
3、众数(masses) 【问题描述】 由文件给出N个1到30000 间无序数正整数,其中 1≤N≤10000,同一个正整数可能会出现多次,出现次数最多的整数称为众数。求出它的众数及它出现的次数。 【输入格式】 输入文件第一行是正整数的个数 N,第二行开始为 N 个正整数。 【输出格式】 输出文件有若干行,每行两个数,第 1 个是众数,第 2 个是众数出现的次数。 【输入样例】 12 2 4 2 3 2 5 3 7 2 3 4 3 【输出样例】 2 4 3 4
第三题就要细说了,一开始写了半天的桶排,硬是没扣出来,WA了好几次,就先果断放弃。再往后做突然就来了灵感 (就很棒)纯属侥幸的切掉。
#include<iostream>
using namespace std;
const int N = 30005;
int n,a[N],maxv;
int main(){
cin>>n;
for (int i=1,x; i<=n; i++){
cin>>x;
a[x]++;
}
for (int i=1;i<=30000;i++)
if (a[i]>maxv) maxv=a[i];
for (int i=1;i<=30000;i++)
if (a[i]==maxv) cout<<i<<" "<<maxv<<endl;
return 0;
}
4、第 k 小整数(knumber) 【问题描述】 现有 n 个正整数,n≤10000,要求出这 n 个正整数中的第 k 个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于 30000。 【输入格式】 第一行为 n 和 k,第二行开始为 n 个正整数的值,整数间用空格隔开。 【输出格式】 第 k 个最小整数的值;若无解,则输出“NO RESULT”。 【输入样例】 10 3 1 3 3 7 2 5 1 2 4 6 【输出样例】 3
第四题先把n个数进行sort排序,然后输出第k个排列好的数。
很简单对吧,但是我得了70,就因为没有仔细读题,没有考虑到无解的情况。
if(i>n)
cout<<"NO RESULT";
else
cout<<a[i-1];
5、军事机密(secret) 【问题描述】 军方截获的信息由 n(n<=30000)个数字组成,因为是敌国的高端秘密,所以一时不能破获。最原始的想法就是对这 n 个数进行从小到大排序,每个数都对应一个序号,然后对第 i 个是什么数感兴趣,现在要求编程完成。 【输入格式】 第一行 n,接着是 n 个截获的数字,接着一行是数字 k,接着是 k 行要输出数的序号。 【输出格式】 k 行序号对应的数字。 【输入样例】 5 121 1 126 123 7 3 2 4 3 【输出样例】 7 123 12
第五题是用时最长的。首先使用了快排,但每个数字所具有的序号没有处理好。最后数组还开小了
总结:
问题所在:
对排序进行强化,不要全部依赖于快排,并不是万能的!
前面的题耗时太长,T7,8,9没时间做了。
——————————————————————————————————————————————————————————————————————————
鄙人愣是把第三题代码交到第五题上,重复三次······