标签:
又到一年NOIP时,我默默地刷起了以往的NOIP题目,正好老师给了我本2007年年鉴,就从2007写起了。
题目简述:给你一坨数字,统计这些数字出现的次数,并按照数字大小输出数字及出现次数
题目一看就有写暴力的冲动,对于每个数当作下标,每输入一次,数组中所存值+1即可,但是看到数据最大的数字会是1.5 * 10 ^ 9,显然内存是不允许的,那么我们就换一种策略,记录一个tot值是现在总共出现的数字的种类,那我们可以用一个二位数组来记录,num[i][0] 是所记录的数字,num[i][1]记录出现的次数,每次输入时从头扫描已存数字,若有则在对应点的次数上+1,没有的话num[++tot][0] = x,num[tot][1] = 1;最后以num[][0]排序输出即可。
当然,咱家是个懒人,心中默念map大法好,就水过了。
#include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <map> using namespace std; typedef long long ll; map<ll,int>m; int main(){ int n,t; scanf("%d",&n); for (int i = 1;i <= n; ++i){ scanf("%d",&t); if (!m.count(t)) m[t] = 1; else m[t]++; } for (map<ll,int> :: iterator i = m.begin();i != m.end(); ++i) cout << i->first << " " << i->second << endl; }
标签:
原文地址:http://www.cnblogs.com/GENEVE/p/4803208.html