zoukankan      html  css  js  c++  java
  • 【AtCoder ABC 075 D】Axis-Parallel Rectangle

    【链接】 我是链接,点我呀:)
    【题意】

    让你找到一个各边和坐标轴平行的矩形。使得这个矩形包含至少K个点。 且这个矩形的面积最小。

    【题解】

    把所有的“关键点“”都找出来。 然后枚举任意两个点作为矩形的对角。 然后看他是不是包含了至少K个点即可。

    【代码】

        #include <bits/stdc++.h>
        using namespace std;
         
        const int N = 50;
         
        int n, k;
        long long ans = -1;
        int xx[N + 10], yy[N + 10];
        pair <int, int> a[N*N + 10];
         
        int main()
        {
        	//freopen("F:\rush.txt", "r", stdin);
        	scanf("%d%d", &n, &k);
        	for (int i = 1; i <= n; i++)
        		scanf("%d%d", &xx[i], &yy[i]);
        	int nn = 0;
        	for (int i = 1; i <= n; i++)
        		for (int j = 1; j <= n; j++)
        			a[++nn] = make_pair(xx[i], yy[j]);
        	for (int i = 1; i <= nn; i++)
        	{
        		for (int j = i+1; j <= nn; j++)
        		{
        			int x1 = min(a[i].first, a[j].first);
        			int x2 = max(a[i].first, a[j].first);
        			int y1 = min(a[i].second, a[j].second);
        			int y2 = max(a[i].second, a[j].second);
        			int num = 0;
        			for (int kk = 1; kk <= n; kk++)
        				if (x1 <= xx[kk] && xx[kk] <= x2 && y1 <= yy[kk] && yy[kk] <= y2)
        					num++;
        			if (num >= k)
        			{
        				long long s = 1LL * (x2 - x1)*(y2 - y1);
        				if (ans == -1)
        					ans = s;
        				else
        					ans = min(ans, s);
        			}
        		}
        	}
        	printf("%lld
    ", ans);
        	return 0;
        }
    
  • 相关阅读:
    Tinyhttpd 代码学习
    Windows noinstall zip 安装MySQL。
    Java 优先队列
    Java Comparable 和 Comparator
    Centos6.6下安装Python3.5
    对象的实现
    对象接口
    适配器模式
    java基础学习(一)
    【MongoDB】如何注册windows服务
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7669809.html
Copyright © 2011-2022 走看看