제출 #580209

#제출 시각아이디문제언어결과실행 시간메모리
580209MODDIFancy Fence (CEOI20_fancyfence)C++14
13 / 100
83 ms2740 KiB
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>
#define vl vector<ll>
#define mp make_pair
#define pb push_back
using namespace std;
const int MOD = 1e9 + 7;
int main(){
	int n;
	cin>>n;
	vl visina, sirina;
	bool all_same = true;
	for(int i = 0; i < n; i++){
		ll a;
		cin>>a;
		visina.pb(a);
		if(i > 0 && visina[i] != visina[i-1]){
			all_same = false;
		}
	}
	for(int i = 0; i < n; i++){
		ll a;
		cin>>a;
		sirina.pb(a);
	}
	ll rez = 0, cur = 0, sum = 0;
	if(all_same){
		ll vis = 0, sir = 0;
		for(int i = 0; i < n; i++){
			vis += visina[i];
			vis %= MOD;
			sir += sirina[i];
			sir %= MOD;
		}
		rez = vis * (vis + 1) / 2;
		rez %= MOD;
		rez *= sir * (sir + 1) / 2;
		rez %= MOD;
		cout<<rez<<endl;
		return 0;
	}
	for(int i = 0; i < n; i++){
		sum += sirina[i];
		sum %= MOD;
		if(visina[i] == 2)
		{
			cur += sirina[i];
			cur %= MOD;
		}
		else{
			if(cur > 0){
				rez += cur * (cur + 1);
				rez %= MOD;
				cur = 0;
			}
		}
	}
	if(cur > 0){
		rez += cur * (cur + 1);
		rez %= MOD;
	}
	rez += sum * (sum + 1) / 2;
	rez %= MOD;
	cout<<rez<<endl;
}
#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...