Submission #922051

#TimeUsernameProblemLanguageResultExecution timeMemory
922051AlebnFancy Fence (CEOI20_fancyfence)C++14
45 / 100
1095 ms2040 KiB
#include <bits/stdc++.h> #define int long long #define sz(x) (int)(x.size()) using namespace std; const int mod=1000000007; int MOD(int x) { return (x+3*mod)%mod; } struct sections { int H=0, W=0; }; int n; vector<sections> a; int section(int h, int w) { h%=mod, w%=mod; int facteur=MOD((h*(h+1))/2); int ans=MOD((w*(w+1))/2); return MOD(ans*facteur); } int subtask5() { int ans=0; for (int i=0; i<n; i++) { int mini=a[i].H; int sum=a[i].W; ans=MOD(ans+section(a[i].W, a[i].H)); //i=j for (int j=i+1; j<n; j++) { //i!=j mini=min(mini, a[j].H); int res=section(mini, sum); // toute la section entre i et j res-=MOD(section(mini, sum-a[i].W)+section(mini, sum-a[j].W)); // j'enlève tous les points qui ne commencent pas res=MOD(res); // par j ou par i res+=section(mini, sum-a[i].W-a[j].W); // je rajoute ce que j'ai enlevé de trop (a+b)^2 ans=MOD(ans+MOD(res)); } } return ans; } int solve() { cin >> n; a.clear(); a.resize(n); for (auto &u: a) cin >> u.H; for (auto &u: a) cin >> u.W; vector<sections> temp; for (int i=0; i<n; i++) { if (!temp.empty() && a[i].H==temp.back().H) temp.back().W+=a[i].W; else temp.push_back(a[i]); } a.clear(); a=temp; n=a.size(); return subtask5(); } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout << solve() << endl; return 0; }
#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...