CF #330 D2 E

相当于给你一些点,要你最多删除不超过k,使得能使用一个边长为整数的长方形,与XY轴平行,使长方形的面积最小。

上课时拿笔来画画,然后忽然思路就开了,要是比赛也这样就好了~~先按X,Y分别排序,由于K较小,而且,删除的时候肯定会删除最外围的点,所以,可以上下左右枚举删了哪些点,排序后的数组来模拟这个过程,最多4^K个选择,可以过。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define LL long long
using namespace std;

///vector<int>f;
const int MAX=100050;

struct Point{
	double x,y;
	int index;
}ptx[MAX],pty[MAX];

bool cmpx(Point a,Point b){
	if(a.x<b.x) return true;
	return false;
}

bool cmpy(Point a,Point b){
	if(a.y<b.y) return true;
	return false;
}
bool vis[MAX];

int n,k;
LL ans;

void dfs(int wl,int wr,int hl,int hr,int counts){
	if(!counts){
		while(vis[ptx[wl+1].index]) wl++;
		while(vis[ptx[wr-1].index]) wr--;
		while(vis[pty[hl+1].index]) hl++;
		while(vis[pty[hr-1].index]) hr--;
		LL x=(ptx[wr-1].x-ptx[wl+1].x==0)?1:(LL)(ptx[wr-1].x-ptx[wl+1].x+0.5);
		LL y=(pty[hr-1].y-pty[hl+1].y==0)?1:(LL)(pty[hr-1].y-pty[hl+1].y+0.5);
		ans=min(ans,x*y);
		return ;
	}

	for(int i=wl+1;;i++){
		if(vis[ptx[i].index]) continue;
		vis[ptx[i].index]=true;
		dfs(i,wr,hl,hr,counts-1);
		vis[ptx[i].index]=false;
		break;
	}
	for(int i=wr-1;;i--){
		if(vis[ptx[i].index]) continue;
		vis[ptx[i].index]=true;
		dfs(wl,i,hl,hr,counts-1);
		vis[ptx[i].index]=false;
		break;
	}
	for(int i=hl+1;;i++){
		if(vis[pty[i].index]) continue;
		vis[pty[i].index]=true;
		dfs(wl,wr,i,hr,counts-1);
		vis[pty[i].index]=false;
		break;
	}
	for(int i=hr-1;;i--){
		if(vis[pty[i].index]) continue;
		vis[pty[i].index]=true;
		dfs(wl,wr,hl,i,counts-1);
		vis[pty[i].index]=false;
		break;
	}

}

int main(){
	while(scanf("%d%d",&n,&k)!=EOF){
		double x1,y1,x2,y2;
		for(int i=0;i<n;i++){
			scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
			ptx[i].x=(x1+x2)/2;ptx[i].y=(y1+y2)/2;
			ptx[i].index=i;
			pty[i]=ptx[i];
			vis[i]=false;
		}
		sort(ptx,ptx+n,cmpx);
		sort(pty,pty+n,cmpy);
		ans=(1LL<<62);
		if(k==n-1){
			cout<<1<<endl;
			continue;
		}
		dfs(-1,n,-1,n,k);
		cout<<ans<<endl;
	}

}

  

时间: 2024-10-17 08:38:56

CF #330 D2 E的相关文章

CF # 369 D2 D、E

D,只要抓住每个点只有一个出度,那么图就能分成几个部分,而且可以发现,一个部分最多一个环. #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define LL long long const int MAXN = 200005; const int MOD = 1e9 + 7; int nt[MAXN]; i

CF #330 C

改了题目之后,就是没有奇数的测试了... 其实可以很轻易地发现,要距离近的一方只会删除两端的,而要求远的一方会删除中间的. 那么,很明显的,剩下的两点会相差x/2个节点,于是,只要计算i和i+x/2的节点的距离即可.取最小的值. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #define LL lon

CF#310 d2

A:|c[1]-c[0]| B:A+-(oc)A[0]==0..n-1 C: #include <cstdio> int n,m,i,j,k,p; int ll,ca,cb,cc; int main(){ scanf("%d%d",&n,&m); for(;i<m;++i){ scanf("%d",&p); scanf("%d",&ll); ++ca; if(ll==1) while(--p){

广东落马官员家中搜出金钱龟

http://www.enet.com.cn/elady/inforcenter/articlelist.jsp?acid=4542&cname=%BA%A3%B3%C7%C4%CF%CC%A8%D5%F2%D5%D2%D0%A1%BD%E3%C9%CF%C3%C5%B0%FC%D2%B9%B7%FE%CE%F1%A1%BE185v88857572%C9%CF%C3%C5%B7%FE%A1%BFzG0n2 http://www.enet.com.cn/elady/inforcenter/arti

当天回家和田玉的话题天有

http://b.faloo.com/look/3/323363/1.html?n=%c9%c7%cd%b7%b4%f3%bb%aa%d5%d2%d0%a1%bd%e3%c9%cf%c3%c5%c8%ab%cc%d7%b7%fe%ce%f1%b5%e7%bb%b0%a1%be%a9Y182%7e2110%7e5658%a1%bfp5zoVNMhxlsw.html http://b.faloo.com/look/3/323363/1.html?n=%c9%c7%cd%b7%b4%f3%bb%aa%

的发挥他的同一家规和体育

http://b.faloo.com/look/3/323363/1.html?n=%b6%ab%dd%b8%b3%a4%b0%b2%d5%f2%d5%d2%d1%a7%c9%fa%c3%c3%b7%fe%ce%f1%b5%e7%bb%b0%a1%be%a9Y182%7e2110%7e5658%a1%bfg2DRkPkHnOzA.html http://b.faloo.com/look/3/323363/1.html?n=%b6%ab%dd%b8%b3%a3%c6%bd%d5%f2%d5%d2%

[转]Java加密算法

如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 复杂的对称加密(DES.PBE).非对称加密算法: DES(Data Encryption Standard,数据加密算法) PBE(Password-based encryption

75喝一杯

http://quote.hexun.com/stock/icb.aspx?code=1&name=%A1%F2%C8%E7%BA%CE%B9%BA%C2%F2%C3%D4%BB%C3%D2%A9%A3%D1%3A%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7 http://quote.hexun.com/stock/icb.aspx?code=1&name=%A1%F5%C3%D4%BB%C3%D2%A9%C8%E7%BA%C

自定义代码便会自动执行

yii2的事件机制可以让我们将自定义的代码注入到特定的执行点.绑定事件后,一旦事件被触发,自定义代码便会自动执行. 例如,在发送邮件时,我们可能引发messageSent事件来发送消息.如果我们想跟踪已经成功发送的邮件,只需要简单地将跟踪代码附加到messageSent事件上. 由此,我们可以看出,事件执行的大致过程:绑定事件>>触发事件. 所谓绑定事件,其实是指绑定事件处理器——即event handler. event handler是事件被触发执行后的回调方法,有四种回调方法: 一个全局