jeudi 7 septembre 2017

Program Aborts when using vector iterators

Can somebody tell me what is the problem with this program? The idea is to display "Yes" if the vector array satisfies all these criteria: The array elements are not sorted in ascending order. The array contains distinct elements. All the array elements should have a value between 1 to n inclusive. Otherwise "No". The program aborts when it reaches the line at if(bSort). Is there anything wrong with the iterator increment?

#include <iostream>
#include <string>
#include <bits/stdc++.h>

using namespace std;

std::string solve(vector <int> &a, int n) {
    vector<int> visited (n);
    int i=0;
    for(std::vector<int>::iterator it = a.begin(); it != a.end(); ++it) {
        i++;
        if((it+1)!=a.end() && (*it > *(it+1)))
        {
           bSort = false;
        }
        if(std::find(visited.begin(), visited.end(), *it)!=visited.end())
        {
            return "No";
        }
        else
        {  
            visited[i] = *it;
        }

        if(*it <= 0 || *it > n)
        {
            return "No";
        }     

    }
    if(bSort)
        return "No";
    else
        return "Yes";

}

int main() {
    int q;
    cin >> q;
    for(int a0 = 0; a0 < q; a0++){
        int n;
        cin >> n;
        vector<int> a(n);
        for(int a_i = 0; a_i < n; a_i++){
           cin >> a[a_i];
        }
        std::string result = solve(a,n);
        cout << result << endl;
    }
    return 0;
}

The issue appears to be happening only with the following input:

1
30
18 8 24 20 7 17 5 9 26 21 25 12 11 15 30 13 19 16 22 10 14 1 3 29 23 2 6 28 4 27

Aucun commentaire:

Enregistrer un commentaire