题解 CF1740B

题解 CF1740B

这个题简单贪心

可能是CF的图片过于具有迷惑性,这里放一个改动的图方便大家理解

我们可以发现,如果让最长边与其他的矩形相邻,就可以让被遮挡的边最大,所以我们直接让最长边挨着相邻矩形即可,然后计算这个矩形的周长即可

计算周长就就是个很简单的事情了

只需要把这个不规则图形中红色的线段以及蓝色的线段加起来就可以了

红色的线段明显是 每个矩形短边 \(\times 2\),蓝色线段就是所有矩形中的最长的长边 \(\times 2\)

/*
#date	:10/29/2022
#editor	:apple_tyr/Apollo_tyr
#problem or
 contest:CF1740B
*/
#include<map>
#include<cstdio>
#include<string>
#include<algorithm>
#include<iostream>
#define int long long
using namespace std;
const int N=2e5+10;
int T,n;
struct Node{
	int x,y;
	bool friend operator  < (Node a,Node b){
		return max(a.x,a.y)<max(b.x,b.y);
	}
}edge[N];
signed main(){
	scanf("%lld",&T);
	while(T--){
		scanf("%lld",&n);
		for(int i=1;i<=n;i++){
			scanf("%lld%lld",&edge[i].x,&edge[i].y);
		}
		sort(edge+1,edge+1+n);
		int len=0;
		for(int i=1;i<=n;i++){
			len+=min(edge[i].x,edge[i].y);
		}
//		printf("%d")
		printf("%lld\n",(max(edge[n].x,edge[n].y)+len)*2);
	}
	return 0;
}

posted @ 2022-11-30 09:06  Tyrue  阅读(17)  评论(0编辑  收藏  举报