제출 #746032

#제출 시각아이디문제언어결과실행 시간메모리
746032vjudge1Fancy Fence (CEOI20_fancyfence)C++17
28 / 100
97 ms4484 KiB
#include <bits/stdc++.h>
using namespace std;

const long long MOD = 1e9+7;

int main(){
    long long n; cin >> n;
    long long x;
    long long ans = 0;
    bool b = true;
    vector<long long> w, h, comp;
    long long wsum = 0;
    for(long long i = 0; i < n; i++){
        cin >> x;
        h.push_back(x);
        if (x != 1 && x != 2) b = false;
    }
    for(long long i = 0; i < n; i++){
        cin >> x;
        wsum += x;
        wsum = wsum % MOD;
        w.push_back(x);
    }
if(b){
    for(long long i = 0; i < n; i++){
        if(h[i] == 2){
            if(i == 0) comp.push_back(w[i]);
            else if(h[i-1] == 2) comp.back() += w[i];
            else comp.push_back(w[i]);
        }
    }

    for(long long k : comp) {
        k = k % MOD;
        ans += k*(k+1);
        ans = ans % MOD;
    }


    ans += wsum*(wsum+1)/2;
    ans = ans % MOD;

    cout << ans;}
else{
    ans = wsum * (wsum+1);
    ans = ans%1000000007;
    ans *= h[0];
    ans = ans%1000000007;
    ans *= (h[0]+1);
    ans = ans%1000000007;
    while(ans % 4 != 0){
        ans += 1000000007;
    }
    ans /= 4;
    cout << ans;
}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...