Учитывая 3 типа запросов, добавьте, удалите или проверьте, существует ли число в наборе - PullRequest
0 голосов
/ 01 февраля 2020

Где мой неправильный подход в моем коде?

Какова правильная идея проблемы?

Ссылка на проблему:

https://vjudge.net/problem/HackerRank-cpp-sets

Формат ввода:

Первая строка ввода содержит где число запросов. Следующие строки содержат запрос каждый. Каждый запрос состоит из двух целых чисел, а где - тип запроса и является целым числом.

Ограничения:

1 <= Q <= 10 ^ 15 </p>

1 <= y <= 3 </p>

1 <= x <= 10 ^ 9 </p>

Формат вывода:

Для запросов тип 3 выведите «Yes» (без кавычек), если число x присутствует в наборе, а если число отсутствует, то выведите «No» (без кавычек). Каждый запрос типа 3 должен быть напечатан в новой строке.

Решить:

#include <bits/stdc++.h>

using namespace std;

int main() {
  int q, y, i, x, e = 0, a[1000], c1 = 0, d = 0, b;

  set<pair<int, int>> m;

  set<pair<int, int>>::iterator it;

  cin >> q; // the number of queries

  for (i = 1; i <= q; i++) {
    cin >> y; // y is the type of the query
    cin >> x; // x is a integer

    m.insert(make_pair(y, x));

    if (y == 3) {
      d++; // d is the total number of type 3
    }
  }

  for (it = m.begin(); it != m.end(); it++) {
    b = it->first;

    if (b == 3) {
      a[e] = it->second; // e is position of the type 3's value is a new array

      e++;
    }
  }

  for (e = 0; e < d; e++) {
    for (it = m.begin(); it != m.end(); it++) {
      b = it->first;

      if (b < 3) {
        if (a[e] == it->second) {

          c1++; // c1 is the counter of the existing type 3's value in the set
        }
      }
    }

    if (c1 > 0) {
      cout << "Yes" << endl;
    } else if (c1 == 0) {
      cout << "No" << endl;
    }

    c1 = 0;
  }
}
...