제출 #1192101

#제출 시각아이디문제언어결과실행 시간메모리
1192101AiperiiiFancy Fence (CEOI20_fancyfence)C++20
73 / 100
1092 ms1864 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() #define ff first #define ss second #define pb push_back const int mod=1e9+7; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int n; cin>>n; bool sb2=1; vector <int> h(n),w(n); for(int i=0;i<n;i++){ cin>>h[i]; if(h[i]>2)sb2=0; } for(int i=0;i<n;i++){ cin>>w[i]; } int x=0,sum=0; for(int i=0;i<n;i++){ x+=w[i]; sum+=w[i]; } int y=x+1; int ans=0; if(sb2){ if(x%2==0)x/=2; else y/=2; ans+=((x%mod)*(y%mod))%mod; ans%=mod; x=0; for(int i=0;i<n;i++){ if(h[i]==2){ x+=w[i]; } else{ y=x+1; ans+=((x%mod)*(y%mod))%mod; ans%=mod; x=0; } } if(x!=0){ y=x+1; ans+=((x%mod)*(y%mod))%mod; ans%=mod; } cout<<ans%mod<<"\n"; return 0; } bool sm=1; for(int i=0;i<n;i++){ if(h[i]!=h[0])sm=0; } if(sm){ if(x%2==0)x/=2; else y/=2; int z=((x%mod)*(y%mod))%mod; int a=h[0]; int b=h[0]+1; if(a%2==0)a/=2; else b/=2; int c=((a%mod)*(b%mod))%mod; ans=(z*c)%mod; cout<<ans<<"\n"; return 0; } bool inc=1; for(int i=1;i<n;i++){ if(h[i]<h[i-1])inc=0; } if(inc){ for(int i=0;i<n;i++){ int a=h[i]; int b=h[i]+1; if(a%2==0)a/=2; else b/=2; int c=((a%mod)*(b%mod))%mod; x=sum; y=x+1; if(x%2==0)x/=2; else y/=2; int z=((x%mod)*(y%mod))%mod; x=sum; int q=x-w[i]; int r=q+1; if(q%2==0)q/=2; else r/=2; int t=((q%mod)*(r%mod))%mod; int d=(z+mod-t)%mod; //cout<<d<<"\n"; d=(d*c)%mod; ans+=d; ans%=mod; sum-=w[i]; } cout<<ans<<"\n"; return 0; } for(int i=0;i<n;i++){ int a=h[i]; int b=h[i]+1; if(a%2==0)a/=2; else b/=2; int c=((a%mod)*(b%mod))%mod; int x=w[i]; int y=w[i]+1; if(x%2==0)x/=2; else y/=2; int z=((x%mod)*(y%mod))%mod; ans+=(c*z)%mod; ans%=mod; int mn=h[i]; for(int j=i+1;j<n;j++){ mn=min(mn,h[j]); int x=(w[i]*w[j])%mod; int a=mn; int b=mn+1; if(a%2==0)a/=2; else b/=2; int c=((a%mod)*(b%mod))%mod; x*=c; x%=mod; ans+=x; ans%=mod; } } cout<<ans<<"\n"; } /* 10^14*(10^14+1)/2 */
#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...