Submission #502434

#TimeUsernameProblemLanguageResultExecution timeMemory
502434Fireball0424Fancy Fence (CEOI20_fancyfence)C++14
30 / 100
434 ms262148 KiB
#include <bits/stdc++.h>
#define int long long
#define fr first
#define sc second
#define pii pair<int,int>
using namespace std;

const int mod = 1e9 + 7;

int modpow(int a, int b){
    if(b == 0) return 1;
    int res = modpow(a, b / 2);
    res = (res * res) % mod;
    if(b & 1) res = (res * a) % mod;
    return res;
}

int cal(int h, int w){
    w = max(0LL, w) % mod;
    int res = h * (h + 1) % mod;
    res = (res * w) % mod;
    res = (res * (w + 1)) % mod;
    res = (res * modpow(4, mod - 2)) % mod;
    return max(0LL, res);
}

void solve(){
    int n;
    cin >> n;
    vector<int> h(n + 1, 0), w(n + 1, 0);
    for(int i = 1; i <= n; ++i) cin >> h[i];
    for(int i = 1; i <= n; ++i) cin >> w[i];
    vector<vector<int> > min_h(n + 1, vector<int>(n + 1, INT_MAX));
    vector<int> pre_w(n + 1, 0);
    for(int i = 1; i <= n; ++i){
        pre_w[i] = pre_w[i-1] + w[i];
        for(int j = i; j <= n; ++j){
            min_h[i][j] = min(min_h[i][j-1], h[j]);
        }
    }
    int ans = 0;
    for(int i = 1; i <= n; ++i){
        for(int j = i; j <= n; ++j){
            ans += cal(min_h[i][j], pre_w[j] - pre_w[i-1]);
            //cout << ans << ' ';
            ans -= cal(min_h[i][j], pre_w[j] - pre_w[i-1] - w[i]);
            //cout << ans << ' ';
            ans -= cal(min_h[i][j], pre_w[j] - pre_w[i-1] - w[j]);
            //cout << ans << ' ';
            ans += cal(min_h[i][j], pre_w[j] - pre_w[i-1] - w[j] - w[i]);
            ans = (ans + mod) % mod;
            //cout << ans << endl;
        }
    }
    cout << ans << endl;
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    //freopen("bbreeds.in", "r");
    //freopen("bbreeds.out", "w");
    solve();
}
#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...