英雄联盟总决赛正在若火如荼的展开,盲僧、刀妹、酒桶、青钢影等各路英雄悉数登场,当一个英雄被选出场时系统自动登记其序号,出场次数最多的英雄成为出场王。给定英雄序号的出场集合T,例如,T={2,4,4,4,6,7}。其出场王是4号英雄,出场次数为3。对于给定的由n个序号组成的出场集T,计算出场王序号及其出场次数。如果出现多个出场王,请输出序号最小的那个。
输入格式:
输入数据的第1行是英雄出场集T中序号个数n(n<1000);第二行输入n个出场英雄序号。
输出格式:
输出数据的第1行给出出场王序号,第2行是出场次数。
输入样例1:
6
2 4 4 4 6 7
输出样例1:
4
3
输入样例2:
10
1234568 828 12345 898232689 12345 12345 9876 321 3 12345
输出样例2:
12345
4
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
#include <algorithm>
using namespace std;
void show(long long a[], int size); //测试用输出
void QuickSort(long long a[], int p, int r); //快速排序
int Partition(long long a[], int p, int r); //快速排序
void Continue(long long a[], int size); //题意要求函数
int main()
{
int n;
cin >> n;
long long a[n];
for(int i = 0; i < n; i++)
cin >> a[i];
QuickSort(a, 0, n-1);
//show(a, n);
Continue(a,n);
return 0;
}
//快速排序的两个函数
void QuickSort(long long a[], int p, int r)
{
if(p >= r)
return;
int q = Partition(a, p, r);
QuickSort(a, p, q-1);
QuickSort(a, q+1, r);
}
int Partition(long long a[], int p, int r)
{
int i = p-1;
int j = p;
while(j < r)
{
if(a[j] <= a[r])
{
swap(a[i+1], a[j]);
i++;
}
j++;
}
swap(a[i+1], a[r]);
return i+1;
}
//看最长连续相同数的函数
void Continue(long long a[], int size)
{
//用来测试每组连续的长度
int m = 0;
int max = 0;
long long king = a[0]; //当前出场王
long long stand = a[0];//当前对比数
for(int i = 0; i < size; i++)
{
//当下一个数连续相等时,m++
if(a[i] == stand)
{
m++;
if(m > max)
{
max = m;
king = a[i];
}
}
//不相等就清空m
else
{
m = 1;
stand = a[i];
}
}
cout << king << '\n' << max << endl;
}
//输出数组
void show(long long a[], int size)
{
for (int i = 0; i < size; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
不分治怎么做:
#include <iostream>
using namespace std;
long long b[10010] = {0};
int main()
{
int n;
cin >> n;
long long a[n];
for(int i = 0; i < n; i++)
{
cin >> a[i];
b[a[i]]++;
}
long long maxpoi = 0;
long long maxval = 0;
int i = 0;
while(i < n)
{
if(maxval < b[a[i]])
{
maxpoi = a[i];
maxval = b[a[i]];
}
i++;
}
cout << maxpoi << endl << maxval;
return 0;
}