zoukankan      html  css  js  c++  java
  • uva 10474 Where is the Marble? 计数排序

    题目给出一系列数字,然后问哪个数字是从小到大排在第几的,重复出现算第一个。

    数据范围为10000,不大,完全可以暴力,sort不会超时。

    但是由于以前做比赛时也遇到这种题目,没注意看数据范围,然后暴力被hack了。之后就学会了计数排序了。

    这题也用计数排序做,挺快的,代码也不长。

    代码:

    #include <cstdio>
    #include <cstring>
    const int maxn = 10001;
    
    int num[maxn], s[maxn];
    
    int main() {
    	int n, q, tmp, m = 0, cnt = 0;
    	while (scanf("%d%d", &n, &q) && (n || q)) {
    		printf("CASE# %d:
    ", ++cnt);
    		memset(num, 0, sizeof(num));		//init
    		memset(s, 0, sizeof(s));
    		for (int i = 1; i <= n; i++) {		//input
    			scanf("%d", &tmp);
    			if (m < tmp)
    				m = tmp;
    			num[tmp]++;
    		}
    		int sum = 0;
    		for (int i = 1; i <= m; i++)		//calc the sum
    			s[i] = s[i - 1] + num[i];
    		for (int i = 1; i <= q; i++) {		//output
    			scanf("%d", &tmp);
    			if (num[tmp])
    				printf("%d found at %d
    ", tmp, s[tmp - 1] + 1);
    			else
    				printf("%d not found
    ", tmp);
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    [CF528D] Fuzzy Search
    [WC2013] 糖果公园
    [APIO2011] 方格染色
    [CTSC2017] 吉夫特
    [HNOI/AHOI2018] 转盘
    [CTSC2008] 网络管理
    [HAOI2018] 苹果树
    [SCOI2016] 萌萌哒
    git创建分支并提交项目
    git 常规操作
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212106.html
Copyright © 2011-2022 走看看