P1097 统计数字

P1097题库链接:https://www.luogu.org/problem/P1097

难度:普及-

算法标签:模拟,排序,概率论

1.桶模拟 O(n) 得分20

由于题目让统计数出现的次数,并按从小到大输出结果,很容易让人想到桶排序,但题目上说所输入的数不超过1500000000(1.5 * 10^9),这意味着若想完全统计,空间开销将会非常大

 1 #include <cstdio>
 2 using namespace std;
 3 int a[400000000];
 4 int main()
 5 {
 6     int n;
 7     scanf("%d", &n);
 8     for(int i = 1; i <= n; ++i)
 9     {
10         int k;
11         scanf("%d", &k);
12         ++a[k];
13     }
14     for(int i = 1; i <= 400000000; ++i)
15         if(a[i] != 0)
16             printf("%d %d\n", i, a[i]);
17     return 0;
18 } 

2.map优化 O(n) 得分100

利用STL中的map容器解决桶排桶过多所导致的空间开销巨大,虽然不相同的数不超过10000个,但输入的总个数可能会非常多,所以数组一定要开大

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <map> 
 5 using namespace std;
 6 map <int, int> a;
 7 int s[50000];
 8 int main()
 9 {
10     int n;
11     scanf("%d", &n);
12     for(int i = 0; i < n; ++i)
13     {
14         scanf("%d", &s[i]);
15         ++a[s[i]];
16     }
17     sort(s, s + n);
18     for(int i = 0; i < n; ++i)
19         if(s[i] != s[i - 1])
20             printf("%d %d\n", s[i], a[s[i]]);
21     return 0;
22 } 

猜你喜欢

转载自www.cnblogs.com/ZhangRunqi/p/11291026.html
今日推荐