Почему мой код не работает?
Во входной строке записана последовательность чисел через пробел. Для каждого числа выведите слово YES (в отдельной строке), если это число ранее встречалось в последовательности или NO, если не встречалось.
Входные данные
Вводится число N - количество элементов списка, а затем N чисел.
Выходные данные
Выведите ответ на задачу.
Sample Input:
6
1 2 3 2 3 4
Sample Output:
NO
NO
NO
YES
YES
NO
#include <iostream>
#include <set>
using namespace std;
int main() {
int n, c, d, x = 0;
cin >> n;
multiset <int> s;
set <int> s2;
for(int i = 0; i < n; i++){
cin >> x;
s.insert(x);
}
for(auto now: s){
c = s2.size();
s2.insert(now);
d = s2.size();
if(c < d){
cout << "NO" << endl;
}
else if (c == d) {
cout << "YES" << endl;
}
}
return 0;
}
Мой результат:
NO
NO
YES
NO
YES
NO
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Знаете, ваш код как-то даже не хочется комментировать. Разве что - зачем просто, если можно сложно?
Вы хотите set? Нет вопросов:
int main() {
int n;
cin >> n;
set <int> s;
for(int x; n-->0;)
{
cin >> x;
cout << (s.insert(x).second ? "NO\n" : "YES\n");
}
}
P.S. Ладно, по вашему коду. Подумайте, в каком порядке выполняется обход элементов multiset?
P.P.S. Здесь N не задается, и решение еще короче:
int main()
{
set <int> s;
for(int x; cin >> x;)
cout << (s.insert(x).second ? "NO" : "YES") << "\n";
}