Submission #1042623

#TimeUsernameProblemLanguageResultExecution timeMemory
1042623Theo830Flooding Wall (BOI24_wall)C++17
0 / 100
488 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF = 1e9+7; const ll MOD = 998244353; typedef pair<ll,ll> ii; #define iii pair<ii,ll> #define f(i,a,b) for(ll i = a;i < b;i++) #define pb push_back #define vll vector<ll> #define F first #define S second #define all(x) (x).begin(), (x).end() ///I hope I will get uprating and don't make mistakes ///I will never stop programming ///sqrt(-1) Love C++ ///Please don't hack me ///@TheofanisOrfanou Theo830 ///Think different approaches (bs,dp,greedy,graphs,shortest paths,mst) ///Stay Calm ///Look for special cases ///Beware of overflow and array bounds ///Think the problem backwards ///Training int main(void){ ios_base::sync_with_stdio(0); cin.tie(0); ll n; cin>>n; ll a[n],b[n]; f(i,0,n){ cin>>a[i]; } f(i,0,n){ cin>>b[i]; if(b[i] < a[i]){ swap(a[i],b[i]); } } ll mpl[n][1005]; ll mpr[n][1005]; f(i,0,n){ f(j,0,1005){ mpl[i][j] = mpr[i][j] = 0; } } mpl[0][a[0]] = mpl[0][b[0]] = mpr[n-1][a[n-1]] = mpr[n-1][b[n-1]] = 1; f(i,1,n){ f(j,0,1005){ mpl[i][max(j,a[i])] += mpl[i-1][j]; mpl[i][max(j,b[i])] += mpl[i-1][j]; if(mpl[i][max(j,a[i])] >= INF){ mpl[i][max(j,a[i])] -= INF; } if(mpl[i][max(j,b[i])] >= INF){ mpl[i][max(j,b[i])] -= INF; } } } ll ans = 0; for(ll i = n-2;i >= 0;i--){ f(j,0,1005){ mpr[i][max(j,a[i])] += mpr[i+1][j]; mpr[i][max(j,b[i])] += mpr[i+1][j]; if(mpr[i][max(j,a[i])] >= INF){ mpr[i][max(j,a[i])] -= INF; } if(mpr[i][max(j,b[i])] >= INF){ mpr[i][max(j,b[i])] -= INF; } } } f(i,1,n-1){ ll sum = 0; for(ll j = 1000;j >= 1;j--){ sum += mpl[i-1][j]; if(sum >= INF){ sum -= INF; } ll posa = sum * mpr[i+1][j]; posa %= INF; if(a[i] < j){ ans += (j - a[i]) * posa; ans %= INF; } if(b[i] < j){ ans += (j - b[i]) * posa; ans %= INF; } } } cout<<ans<<"\n"; }
#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...