Ошибка выполнения на CodeChef: SIGSEGV - CodeChef - PullRequest
0 голосов
/ 27 апреля 2020

Я решаю этот вопрос: https://www.codechef.com/LTIME83B/problems/FFL

Но в этом я получаю RE (SIGSEGV). Я не понимаю, почему я это получаю?

Не думаю, что я превысил предел массива.

Тогда почему я получаю эту ошибку?

Мой код:

#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#define ll long long
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    ll t;
    cin >> t;
    while (t--)
    {
        ll n, s;
        cin >> n >> s;
        s = 100 - s;
        ll i, a[n], k;
        vector<ll> g1;
        vector<ll> g2;
        for (i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        for (i = 0; i < n; i++)
        {
            cin >> k;
            if (k == 0)
            {
                g1.push_back(a[i]);
            }
            if (k == 1)
            {
                g2.push_back(a[i]);
            }
        }
        ll o = *min_element(g1.begin(), g1.end());
        ll p = *min_element(g2.begin(), g2.end());
        if (s >= o + p)
        {
            cout << "yes" << endl;
        }
        else
        {
            cout << "no"<<endl;
        }
    }
    return 0;
}

1 Ответ

1 голос
/ 27 апреля 2020

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

#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#define ll long long
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    ll t;
    cin >> t;
    while (t--)
    {
        ll n, s;
        cin >> n >> s;
        s = 100 - s;
        ll i, a[n], k;
        vector<ll> g1;
        vector<ll> g2;
        for (i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        for (i = 0; i < n; i++)
        {
            cin >> k;
            if (k == 0)
            {
                g1.push_back(a[i]);
            }
            if (k == 1)
            {
                g2.push_back(a[i]);
            }
        }
        if(g1.size() == 0 || g2.size() == 0){
            cout<<"no\n";
            continue;
        }
        ll o = *min_element(g1.begin(), g1.end());
        ll p = *min_element(g2.begin(), g2.end());
        if (s >= o + p)
        {
            cout << "yes" << endl;
        }
        else
        {
            cout << "no"<<endl;
        }
    }
    return 0;
}

Попробуйте отправить этот код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...