답안 #577534

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
577534 2022-06-15T04:02:49 Z talant117408 Fancy Fence (CEOI20_fancyfence) C++17
30 / 100
44 ms 1880 KB
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;

#define long                unsigned long 
#define pb                  push_back
#define mp                  make_pair
#define all(v)              (v).begin(),(v).end()
#define rall(v)             (v).rbegin(),(v).rend()
#define lb                  lower_bound
#define ub                  upper_bound
#define sz(v)               int((v).size())
#define do_not_disturb      ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl                '\n'

void solve() {
    int n;
    cin >> n;
    
    ll mod = 1e9+7;
    function <ll(ll, ll)> add = [&](ll a, ll b) {
        return ((a+b)%mod+mod)%mod;
    };
    function <ll(ll, ll)> mult = [&](ll a, ll b) {
        return ((a*b)%mod+mod)%mod;
    };
    function <ll(ll, ll)> binpow = [&](ll a, ll b) {
        ll res = 1;
        while (b) {
            if (b&1) res = mult(res, a);
            a = mult(a, a);
            b >>= 1;
        }
        return res;
    };
    ll inv2 = binpow(2, mod-2);
    function <ll(ll)> calc = [&](ll n) {
        return mult(mult(n, n+1), inv2);
    };
    
    vector <ll> h(n), w(n);
    for (auto &to : h) cin >> to;
    for (auto &to : w) cin >> to;
    stack <pll> heights;
    ll ans = 0, sum = 0;
    for (int i = 0; i < n; i++) {
        while (sz(heights) && heights.top().first >= h[i]) {
            auto v = heights.top(); heights.pop();
            w[i] += v.second;
            if (v.first == h[i]) {
                ans = add(ans, -mult(calc(v.first), calc(v.second)));
            }
        }
        ans = add(ans, mult(calc(h[i]), calc(w[i])));
        ans = add(ans, mult(sum, w[i]));
        sum = add(sum, mult(calc(h[i]), w[i]));
    }
    cout << ans << endl;
}

int main() {
    do_not_disturb
    
    int t = 1;
    //~ cin >> t;
    while (t--) {
        solve();
    }
    
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 4 ms 468 KB Output is correct
3 Correct 16 ms 1108 KB Output is correct
4 Correct 33 ms 1876 KB Output is correct
5 Correct 40 ms 1880 KB Output is correct
6 Correct 1 ms 232 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 4 ms 468 KB Output is correct
4 Correct 19 ms 1108 KB Output is correct
5 Correct 33 ms 1880 KB Output is correct
6 Correct 35 ms 1876 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 4 ms 468 KB Output is correct
9 Correct 18 ms 1108 KB Output is correct
10 Correct 44 ms 1876 KB Output is correct
11 Correct 37 ms 1876 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -