Невозможно ввести необходимые данные для программы C ++ в консоли windows - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь решить Набор задач CSES: Квартиры , которые вводятся таким образом в 3 строках, но я не могу обработать / передать все три строки в терминале Windows. Я использую редактор Geany, и компиляция прошла успешно.

10 10 0
37 62 56 69 34 46 10 86 16 49
50 95 47 43 9 62 83 71 71 7

Может ли кто-нибудь просмотреть и сказать мне, что не так? Есть ли ошибка в моем журнале c?

#include <bits/stdc++.h>
using namespace std;

int n, m, k;

int main()
{
    vector<int> v1;
    vector<int> v2;
    vector<bool> allotted(n, false);

    cin >> n >> m >> k;

    for (int i = 0; i < n; ++i) {
        cin >> v1[i];
    }

    for (int j = 0; j < m; ++j) {
        cin >> v2[j];
    }

    sort(v2.begin(), v2.end());
    sort(v1.begin(), v1.end());
    int ans = 0;
    for (int req = 0; req < n; ++req) {
        for (int x = -k; x <= k; ++x) {
            if (find(v2.begin(), v2.end(), v1[req]+x) != v2.end() && alloted[req] == false) {
                ++ans;
                allotted[req] = 1;
            }
            else {
                continue;
            }
        }
    }

    cout << ans;
    return 0;
}

Вывод:

10 10 0
37 62 56 69 34 46 10 86 16 49


------------------
(program exited with code: -1073741819)

Ответы [ 3 ]

3 голосов
/ 10 июля 2020

Вы должны выделить элементы перед доступом к ним или добавить элементы с помощью push_back.

Для выделения элементов использование resize() является хорошим способом.

vector<int> v1;
vector<int> v2;
vector<bool> allotted(n, false); // note that n is zero here!

cin>>n>>m>>k; // after here, the size will be n (may not when the reading fails)

// allocate elements
v1.resize(n);
v2.resize(m);
allotted.resize(n);
0 голосов
/ 10 июля 2020

В качестве альтернативы ответу MikeCAT, если вы отложите объявление своих векторов до тех пор, пока не узнаете, насколько они должны быть большими, вы можете создать их правильного размера.

cin>>n>>m>>k;
vector<int> v1(n); // v1 has size n
vector<int> v2(m); // v2 has size m
vector<bool> allotted(n, false); // allotted has size n
0 голосов
/ 10 июля 2020

Вы забыли указать своим векторам, какой длины они должны быть. В результате вы считываете данные в несуществующие переменные.

...