hdu 5038(排序水题)

2015-07-20 17:10:45 来源: 作者: 浏览: 2

题意:有n个数字,带入10000 - (100 - ai) ^ 2公式得到n个数,输出n个数中频率最大的数,如果有并列就按值从小到大都输出输出,如果频率相同的数字是全部的n个数,就输出Bad。。。。

题解:统计数字个数和频率,排序后输出。

#include 
  
   
#include 
   
     #include 
    
      using namespace std; const int N = 10005; int vis[N], n; struct Num { int value; int cnt; }num[N]; bool cmp(Num a, Num b) { if (a.cnt != b.cnt) return a.cnt > b.cnt; return a.value < b.value; } int main() { int t, cas = 1; scanf("%d", &t); while (t--) { memset(vis, 0, sizeof(vis)); scanf("%d", &n); int a, k = 0; for (int i = 0; i < n; i++) { scanf("%d", &a); int temp = 10000 - (100 - a) * (100 - a); if (!vis[temp]) { vis[temp]++; num[k].cnt = 0; num[k++].value = temp; } else vis[temp]++; } for (int i = 0; i < k; i++) num[i].cnt = vis[num[i].value]; sort(num, num + k, cmp); int m = 1; for (int i = 0; i < k - 1; i++) { if (num[i].cnt == num[i + 1].cnt) m++; else break; } if (m == k && k != 1) { printf("Case #%d:\nBad Mushroom\n", cas++); continue; } printf("Case #%d:\n", cas++); printf("%d", num[0].value); for (int i = 1; i < m; i++) printf(" %d", num[i].value); printf("\n"); } return 0; }
    
   
  


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: