题目链接:http://poj.org/problem?id=2092
思路分析:先统计数据,在根据Count降序排序,Count相等时按照Num升序排序;再输出Count第二大的所有Num;
代码如下:
#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 ", 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; }