hdu 5210 hash统计或stl

方法1:

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4
 5 const int N = 101;
 6 int cnt[N];
 7
 8 int main()
 9 {
10     int n, k;
11     while ( cin >> n )
12     {
13         memset( cnt, 0, sizeof(cnt) );
14         for ( int i = 1; i <= n; i++ )
15         {
16             int tmp;
17             cin >> tmp;
18             cnt[tmp]++;
19         }
20         cin >> k;
21         int kinds = 0;
22         for ( int i = 1; i <= n; i++ )
23         {
24             if ( cnt[i] ) kinds++;
25         }
26         int sum = n - kinds;
27         if ( sum < k )
28         {
29             k -= sum;
30             kinds -= k;
31         }
32         cout << kinds << endl;
33     }
34     return 0;
35 }

方法2:

引入set判断重复,代码只有些许改变。

 1 #include <iostream>
 2 #include <set>
 3 using namespace std;
 4
 5 int main()
 6 {
 7     int n, k;
 8     while ( cin >> n )
 9     {
10         set<int> s;
11         for ( int i = 1; i <= n; i++ )
12         {
13             int tmp;
14             cin >> tmp;
15             s.insert(tmp);
16         }
17         cin >> k;
18         int kinds = s.size(), sum = n - kinds;
19         if ( sum < k )
20         {
21             k -= sum;
22             kinds -= k;
23         }
24         cout << kinds << endl;
25     }
26     return 0;
27 }
时间: 2024-11-10 15:56:31

hdu 5210 hash统计或stl的相关文章

hdu 5207 hash统计

题目大意:求最大的两个数的最大公约数. 思路:数据范围较小,只有10^5,可以考虑哈希. 解法1: 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 const int N = 100001; 7 int hash_table[N]; 8 int a[N]; 9 int n; 10 11 void set( int x ) 12 { 13 i

海量数据面试题----分而治之/hash映射 + hash统计 + 堆/快速/归并排序

1.从set/map谈到hashtable/hash_map/hash_set 稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为基础准备.一般来说,STL容器分两种: 序列式容器(vector/list/deque/stack/queue/heap), 关联式容器.关联式容器又分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表),这些容器均以RB-tree完成.此外,还有第3类关

hdu 4941 Magical Forest(STL map &amp; 结构体运用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 220    Accepted Submission(s): 105 Problem Description There is a forest c

HDU 2072 单词数 --- stringstream+STL

/* HDU 2072 单词数 --- stringstream+STL */ #include <cstdio> #include <iostream> #include <sstream> #include <string> #include <set> using namespace std; set<string> k; int main() { string s; while (getline(cin, s) &&a

大数据处理算法三:分而治之/hash映射 + hash统计 + 堆/快速/归并排序

百度面试题1.海量日志数据,提取出某日访问百度次数最多的那个IP. IP 是32位的,最多有个2^32个IP.同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的 IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率.然后再在这1000个最大的IP中,找出那个频率最大的IP,即 为所求. 百度面试题2.搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节. 假设目前有一

HDU - 5210 - Delete &amp;&amp; 5211 - Mutiple (BestCoder Round #39)

题目传送:HDU - 5210 HDU - 5210 - Delete 思路:简单题 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include &l

HDU 4909 String 统计+状压

因为连续异或满足区间减法性质,所以可以状压之后用异或来判断是否为符合条件的单词并且存储次数 一开始用map,一直超时.虽然直接用开1<<26的数组内存存的下,但是memset的时间肯定会超,但是只要在每次循环之后把加过的值减掉就可以绕过memset了. #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits>

HDU 2008 数值统计

数值统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 53462    Accepted Submission(s): 27366 Problem Description 统计给定的n个数中,负数.零和正数的个数. Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数

hdu 4941 Magical Forest(STL之map应用)2014多校训练第7场

Magical Forest                                                                       Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description There is a forest can be seen as N * M grid. In this fore