AOJの問題のALDS1_4_Bに対して、以下のコードを記述しました。
C++
1#include <bits/stdc++.h> 2using namespace std; 3int main() 4{ 5 int n; 6 cin >> n; 7 vector<int> s(n); 8 for (int i = 0; i < n; i++) 9 { 10 cin >> s[i]; 11 } 12 13 int q; 14 cin >> q; 15 int sum = 0; 16 for (int i = 0; i < q; i++) 17 { 18 int t; 19 cin >> t; 20 if (lower_bound(s.begin(), s.end(), t) != s.end()) 21 { 22 sum++; 23 } 24 } 25 cout << sum << endl; 26} 27
このコードに対して以下の入力例を与えると、10が出力されます。(正解は8です。)
15
0 0 1 1 2 2 3 3 3 5 6 6 8 9 9
10
8 4 6 5 0 2 1 7 9 3
私はイテレータの範囲内から指定した値以上の最小の要素が見つからなかった場合、lower_bound(s.begin(), s.end(), t)の戻り値はs.end()だと理解しています。したがって、if (lower_bound(s.begin(), s.end(), t) != s.end())で、イテレータの範囲内から指定した値以上の最小の要素が見つかった場合のみ、sumをインクリメントしています。しかし、デバッグしてみると、上記入力例の4や7もカウントしていることを確認しました。lower_bound(s.begin(), s.end(), t)の戻り値はs.end()ではないのでしょうか。それとも、他に何か別の要因で不正解になっているのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/05 00:37
2020/01/05 13:03