Решение задачи Добрый Антон с Codeforces

Без пояснения   Просмотров: 123


Борису опять нужна помощь Антона в составлении задачи. На этот раз Антону нужно решить для Бориса следующую задачу:

Есть две массива целых чисел a и b длины n. Оказалось, что массив a содержит элементы только из множества {−1,0,1}.

Антон может проделать следующую последовательность операций любое количество раз:

Выбрать любую пару индексов (i,j) такую, что 1≤i Добавить ai к aj. Другими словами, j-й элемент массива становится равным ai+aj.
Например, из массива [1,−1,0] за одну операцию можно получить массивы [1,−1,−1], [1,0,0] и [1,−1,1].

Антон хочет узнать, можно ли применить некоторое количество (возможно, нулевое) операций выше к массиву a, чтобы получить массив b. Можете ли вы ему помочь?

Код

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int t, n;
    cin >> t;
    for(int i = 0; i < t; ++i){
        cin >> n;
        int m = 0, p = 0;
        vector<int> a(n);
        vector<int> b(n);
        for(int j = 0; j < n; ++j){
           cin >> a[j];
        }
        for(int j = 0; j < n; ++j){
            cin >> b[j];
        }
        bool tt = true;
        for(int j = 0; j < b.size(); ++j){
            if(a[j] > b[j]){
                if(m == 0){
                    tt = false;
                    break;
                }
            }
            else if(a[j] < b[j]){
                if(p == 0){
                    tt = false;
                    break;
                }
            }
            if(a[j] == -1)
                m = -1;
            else if(a[j] == 1)
                p = 1;
        }
        if(tt)
            cout << "YES";
        else
            cout << "NO";
        cout << endl;
    }
    return 0;
}

         

Администратор Photo Автор: Администратор




Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться