Question link: http://poj.org/problem? Id = 2092
Ideas:
First, statistical data is sorted by count in descending order. If count is equal, data is sorted by num in ascending order. Then, all the num with the second largest count is output;
Code:
#include <iostream>#include <string.h>#include <algorithm>using namespace std;#define MAX_N ( 10000 + 20 )struct Player{ int Num; int Count;};bool Cmp( Player a, Player b );int main(){ int n, m; Player P[MAX_N]; while( scanf("%d %d", &n, &m) ) { int Tmp, i, j; memset( P, 0, sizeof(P) ); if ( m == 0 && n == 0 ) break; for ( i = 0; i < n; ++i ) for( j = 0; j < m; ++j ) { scanf( "%d", &Tmp ); P[Tmp].Num = Tmp; P[Tmp].Count++; } sort( P, P + 10010, Cmp ); i = 1; while( P[i].Count == P[i+1].Count ) { printf("%d ", P[i].Num ); i++; } printf( "%d\n", P[i].Num ); } return 0;}bool Cmp( Player a, Player b ){ if ( a.Count == b.Count ) return a.Num < b.Num; else return a.Count > b.Count;}
Poj_2092 grandpa is famous