У меня проблема с тем, что я не конвертирую const__gnu_cxx::__normal_iterator<длинный длинный int* , std:: vector

#c

#c

Вопрос:

Я пытаюсь решить вопрос из конкурса Div 3. У меня проблемы со строками 25 и 26, там говорится

 error: cannot convert ' const__gnu_cxx::__normal_iterator<long long int*, std::vector<long long int>
  

Я не слишком уверен, что не так. Цель этой строки — сохранить минимум векторов a и b в длинное целое число amin и bmin.

 #include <bits/stdc  .h>

using namespace std;

#define ll long long
#define ld long double
#define endl "n"

void solve(){
    ll input;
    ll total;

    int amount; cin >> amount;
    vector<ll> a, b;
    for(int i = 0; i < amount; i  ){
        cin >> input;
        a.push_back(input);
    }
    for (int i = 0; i < amount; i  ){
        cin >> input;
        b.push_back(input);
    }

    ll amin, bmin;
    amin = min(a.begin(), a.end());
    bmin = min(b.begin(), b.end());
    ll adif, bdif, totaldif;


    for(int i = 0; i < amount; i  ){
        adif = a[i] - amin;
        bdif = b[i] - bmin;
        totaldif = abs(adif - bdif);
        total  = (adif - totaldif)   (bdif - totaldif)   totaldif;
    }

    cout << total << endl;



}


int main()
{

    ios::sync_with_stdio(false);
    cin.tie(0);

    int t; cin >> t;
    while(t--){
        solve();
    }



}
  

Ответ №1:

std::min возвращает минимум из 2 элементов, а не минимальный элемент диапазона. Предполагая, что вам нужны не минимум 2 итератора, а минимальный элемент диапазона, вам нужно std::min_element и вам нужно разыменовать результат, вот так:

 amin = * min_element(a.begin(), a.end());
    // ^
  

И вам нужно сделать то же самое для bmin .


Кроме того, пожалуйста, избегайте using namespace std; и всех #define символов для типов, это просто делает код более запутанным для чтения.

Комментарии:

1. О, хорошо, хорошо. Спасибо. Я вижу, std::min может возвращать только 2 элемента. Хорошо. Понял, спасибо.

2. @FenixVictoria Ну, он не возвращает 2 элемента, он возвращает минимум 2 элемента. Вы также можете использовать std::min для возврата минимального количества элементов.

3. Ну, я понимаю, что это плохая практика, но для конкурентного программирования это получение ответов и кодирование максимально быстрым способом. Это не предназначено для того, чтобы люди их читали. Я понимаю, что вы имеете в виду, спасибо за предупреждение.

4. @FenixVictoria Если это не предназначено для чтения людьми, то почему вы публикуете это здесь, чтобы люди читали? Это объясняет множество отрицательных голосов, полученных вашим вопросом.