給 n (≤20000) 個 DNA 序列(長度 ≤20),求每個序列在輸入中出現的次數,輸出「出現 i 次的序列有多少個」對應每行。即:統計頻率的頻率。
輸入以 0 0 結束。
unordered_map 統計每個序列出現次數 freq[s]。cnt[f] 統計出現 f 次的序列有多少種。遍歷 map:cnt[freq[s]]++。cnt[1] 到 cnt[n](每行一個)。#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
while (cin >> n >> m, n || m) {
unordered_map freq;
string s;
for (int i = 0; i < n; ++i) {
cin >> s;
freq[s]++;
}
vector cnt(n+1, 0);
for (auto& [seq, f] : freq) cnt[f]++;
for (int i = 1; i <= n; ++i) cout << cnt[i] << '\n';
}
return 0;
}
簡單哈希表應用,代碼極短,體現「Map 計數」核心模式。