質問
競プロ初心者です。
AtCoder Programming Guide for beginners の Ex. 23 最頻値の問題を解いていたのですが、sample01.txt, sample02.txt, sample03.txtのテストはパスしたのですが、test01.txt, test02.txtはWA
になってしまいます。test01.txtとtest02.txtの中身がわからないので正確なことはわからないのですが、大きいデータのため何か不都合が生じたのではないかと考えています。下記のコードで上手くいかない原因がわかる方いらっしゃったら教えていただけませんか?
実行結果
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
sample01.txt | AC | 8ms | 3636k |
sample02.txt | AC | 3ms | 3700k |
sample03.txt | AC | 3ms | 3656k |
test01.txt | WA | 23ms | 3676k |
test02.txt | WA | 41ms | 3736k |
ソースコード
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int N, n; 6 cin >> N; 7 priority_queue<int> pq; 8 for (int i = 0; i < N; i++) { 9 cin >> n; 10 pq.push(n); 11 } 12 int count = 0, max; 13 for (int i = 0; i < N; i++) { 14 if (i == 0) max = pq.top(); 15 if (max == pq.top()) { 16 count++; 17 pq.pop(); 18 } 19 } 20 printf("%d %d\n", max, count); 21}
AtCoder記載の解答
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int N; 6 cin >> N; 7 vector<int> A(N); 8 for (int i = 0; i < N; i++) { 9 cin >> A.at(i); 10 } 11 12 map<int, int> cnt; 13 for (int x : A) { 14 if (cnt.count(x)) { 15 // 既に含まれているならインクリメント 16 cnt.at(x)++; 17 } else { 18 // 含まれていないなら、1を追加 19 cnt[x] = 1; 20 } 21 } 22 23 int max_cnt = 0; // 出現回数の最大値を保持 24 int ans = -1; // 出現回数が最大になる値を保持 25 for (int x : A) { 26 // 今見ているxの出現回数が、その時点の最大よりも大きければ更新 27 if (max_cnt < cnt.at(x)) { 28 max_cnt = cnt.at(x); 29 ans = x; 30 } 31 } 32 33 cout << ans << " " << max_cnt << endl; 34}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/20 09:08
2021/02/20 12:41