Submission #1156684

#TimeUsernameProblemLanguageResultExecution timeMemory
1156684_rain_Garden (JOI23_garden)C++20
30 / 100
3093 ms8228 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N=(int)500000;
const LL INF=(LL)1e18;
int p[N+2][2],r[N+2][2];
int n,m,d;

namespace problem1{
	bool check(){
		return n+m<=5000;
	}	
	
	LL form_swap(int x,int a,int y){
		if (a>y) return -1;
		if (a<x && a+d>y) return -1;
		if (x<=a && a<=y) return a;
		return a+d;
	}

		
	LL Cost(int x,int y){
		vector<int>v;
		for(int i=1;i<=n;++i){
			if (form_swap(x,p[i][0],y)==-1) return INF;
			v.push_back(r[i][0]);
//			cout<<form_swap(x,p[i][0],y)<<' '<<x<<' '<<y<<'\n';
		}
		for(int i=1;i<=m;++i){
			if (form_swap(x,p[i][1],y)==-1) v.push_back(r[i][1]);
		}
		sort(v.begin(),v.end()); v.resize(unique(v.begin(),v.end())-v.begin());
		int height=y-x+1;
		int weight=v.back()-v.front()+1;
		v.push_back(v[0]);
		for(int i=1;i<v.size()-1;++i){
			weight=min(weight,v[i-1]+d-v[i]+1);
		}
		return (LL)height*weight;
	}
	
	void main_code(){
		LL ans=INF;
		for(int x=0;x<=d;++x){
			for(int y=x;y<=2*d;++y){
				ans=min(ans,Cost(x,y));
			}
		}
		cout<<ans<<'\n';
	}
}


int main(){
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
//	freopen("txt.inp","r",stdin);
//	freopen("txt.out","w",stdout);
	
	cin>>n>>m>>d;
	for(int i=1;i<=n;++i) cin>>p[i][0]>>r[i][0];
	for(int i=1;i<=m;++i) cin>>p[i][1]>>r[i][1];
	if (problem1::check()) return problem1::main_code(),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...