UVA 10474 - Where is the Marble?
主要利用题目中的条件,并不需要排序。因为出现的数不超过10000。只需要统计0 - 10000出现数的个数,就可以确定出现数的排名。
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int n, q; int que[10005]; int count = 1; while (scanf("%d%d", &n, &q) && n && q) { memset(que, 0, sizeof (que)); int maxn = 0, tmp; for (int i=0; i<n; i++) { scanf("%d", &tmp); que[tmp]++; maxn = maxn < tmp ? tmp : maxn; // 记录下出现的最大数 } tmp = 0; for (int i=0; i<=maxn; i++) { if (que[i]) { tmp += que[i]; que[i] = tmp-que[i]+1; } } printf("CASE# %d:\n", count++); for (int i=0; i<q; i++) { scanf("%d", &tmp); if (que[tmp]) { printf("%d found at %d\n", tmp, que[tmp]); } else { printf("%d not found\n", tmp); } } } return 0; }