Fotos de Relíquias

Problem Link

Solution by TioPatinhas100 pts

Code / Notes

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

int main() {
    long long N;
    cin >> N;
    vector<int>A;
    vector<long long>S;
    long long cont = 0;
    for (long long i = 0; i < N; i++) { // primeiro for
        int Ai;
        cin >> Ai;
        A.push_back(Ai);
    }
    for (long long i = 0; i < N; i++) { // segundo for
        if (A[i] == 0) {
            cont++;
        } else if (A[i] == 1) {
            S.push_back(cont);
            cont = 0;
        }
    } S.push_back(cont);
    long long ans = 0;
    long long limit = S.size();
    for (long long i = 0; i < limit-1; i++) {
        long long Ri = (S[i] + 1)*(S[i+1] + 1);
        ans = ans + Ri;
    }
    cout << ans;
}
//Observe que é necessário usar o long long, por causa das restrições, é até dito no problema Duh
//Errei muita besteira por causa do long long
//Anotação 1: O S.size() não é um int, ele é muito próximo disso, só por precaução, eu criei um int e igualei a
//seu valor, pra não dar erro.
//Anotação 2: Eu usei o for (auto x : A) no segundo for (de cima para baixo), isso é um erro crasso, por causa
//do maldito long long, já que o i varia de 0 até N, um valor exorbitante
//Anotação 3: O long long é um bits 64 (pesquisei) e cobre os valores até 9 quintilhões (9*10^18), enquanto o
// int é um bits 32, só cobre até 2 bilhões (2*10^9)
//Anotação 4: Não esqueça de colocar o S.push_back() no final, depois do segundo for, se não ele não contará
//os zeros depois do último um, visto que ele só usa o S.push_back depois que identifica o um. Logo, coloque
//um 1 no vector A, ou use o S,push_back depois do for!! 

Last updated 1 month, 4 weeks ago


« Back to problem