uvalive3695Distant Galaxy

简介: 题意:给出平面上的n个点,找一个矩形,使得边界上包含尽量多的点。 代码: View Code 1 #include 2 #include 3 #include 4 #define DEBUG 5 using namespace std; 6 struct Z...

题意:给出平面上的n个点,找一个矩形,使得边界上包含尽量多的点。

代码:

View Code
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <algorithm>
 4 #define DEBUG
 5 using namespace std;
 6 struct ZZ{
 7     int x, y;
 8     bool operator < (const ZZ& p) const{
 9         return x<p.x;
10     }
11 };
12 int max(int a, int b){
13     return a>b?a:b;
14 }
15 const int MAXN = 100 + 10;
16 ZZ p[MAXN];
17 int n, m, y[MAXN], on[MAXN], on2[MAXN], zl[MAXN];
18 
19 int solve(){
20     sort(p, p+n);
21     sort(y, y+n);
22     m = unique(y, y+n) - y;
23     if(m<=2) return n;
24     
25     int ans = 0;
26     for(int a=0; a<m; a++){
27         for(int b=a+1; b<m; b++){
28             int ymin = y[a];
29             int ymax = y[b];
30 
31             int k = 0;
32             for(int i=0; i<n; i++){
33                 if(i==0 || p[i].x!=p[i-1].x){
34                     k++;
35                     on[k] = on2[k] = 0;
36                     if(k==0) zl[k] = 0;
37                     else zl[k] = zl[k-1] + on2[k-1] - on[k-1];
38                 }
39                 if(p[i].y>ymin && p[i].y<ymax) on[k]++;
40                 if(p[i].y>=ymin && p[i].y<=ymax) on2[k]++;
41             }
42             if(k<=2) return n;
43 
44             int M = 0;
45             for(int j=1; j<=k; j++){
46                 ans = max(ans, zl[j]+on2[j]+M);
47                 M = max(M, on[j]-zl[j]);
48             }
49         }
50     }
51     return ans;
52 }
53 int main(){
54 #ifndef DEBUG
55     freopen("in.txt", "r", stdin);
56 #endif
57     int cas=0;
58     while(scanf("%d", &n)==1 && n){
59         for(int i=0; i<n; i++){
60             scanf("%d%d", &p[i].x, &p[i].y);
61             y[i]=p[i].y;
62         }
63         printf("Case %d: %d\n", ++cas, solve());
64     }
65     return 0;
66 }

这题感觉自己还是没理解透彻。

目录
相关文章
|
人工智能 算法 数据管理
工业机理模型
工业机理模型
1115 2
|
网络协议 安全 Linux
小白带你学习文件共享服务器FTP和SAMBA的学习(二十二)
小白带你学习文件共享服务器FTP和SAMBA的学习(二十二)
735 0
|
消息中间件 存储 Java
RabbitMQ之延迟队列解读
RabbitMQ之延迟队列解读
体育赛事直播系统怎么开发(足球篮球电竞)
一、通过购买现成源码(如“熊猫比分”)并进行二次开发,是一种快速启动体育直播项目的方式,适合需求变动不大、预算有限的情况。但需注意,大规模改动可能增加工作量和潜在错误。 二、全新定制开发体育直播系统,虽成本高、周期长(约2周),但能完全根据客户需求设计,提供更高的灵活性和定制化程度。开发前需详细规划功能与界面布局,确保最终产品符合预期。
体育赛事直播系统怎么开发(足球篮球电竞)
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
JSON JavaScript 前端开发
Google Charts
Google Charts
434 2
|
缓存 安全
预检请求(Preflight Request)
预检请求(Preflight Request)
1073 3
|
安全 搜索推荐 机器人
纳米技术与医疗:纳米机器人的临床应用前景
【9月更文挑战第28天】纳米机器人作为纳米技术在医疗领域的重要应用,正逐步改变着传统医疗的面貌。它们在药物输送、癌症治疗、手术辅助和疾病诊断等方面展现出广阔的应用前景。随着科学技术的不断进步和纳米技术的不断成熟,我们有理由相信,纳米机器人将成为医疗领域的一个重要且不可或缺的组成部分,为人类的健康事业做出更大的贡献。同时,我们也应关注纳米技术的安全性和可靠性问题,确保其在医疗应用中的安全和有效。
1628 1
|
存储 机器学习/深度学习 人工智能
向量数据库:新一代的数据处理工具
向量数据库是一种特殊类型的数据库,它可以存储和处理向量数据。向量数据通常用于表示多维度的数据点,例如在机器学习和人工智能中使用的数据。在向量数据库中,数据被表示为向量,这些向量可以在多维空间中进行比较和搜索。这种数据库的一个关键特性是它能够快速地找到与给定向量最相似的其他向量,这是通过计算向量之间的距离(例如欧氏距离或余弦相似度)来实现的。
3446 0
向量数据库:新一代的数据处理工具
|
小程序 前端开发 语音技术
开源!!!垃圾分类识别小程序--------附源码!!!
开源!!!垃圾分类识别小程序--------附源码!!!
647 0

热门文章

最新文章