这道题,我们一开始就能想到O(n^5)的算法---n^4找矩阵的两个对顶角,n用来查找。但因为n<=100,n^5=10^10,所以我们必须用优化算法。我们先枚举上下界(这两条线上面要有点。用了离散化的思想),即局部枚举,然后在用n的时间一列一列的算(上面有点的。用了离散化的思想),最终算法O(n^3)

#include<iostream>

#include<cstdio>
#include<algorithm>
using namespace std;
struct wo{
int x,y;
};
int cmp(wo a,wo b){
return a.x<b.x;
}//按行排序 
wo a[105];
int n,m;
int y[105],on[105],on2[105],left1[105];//left是系统内部的一个名字
int solve(){
sort(a+1,a+n+1,cmp);
sort(y+1,y+n+1);
m=unique(y+1,y+n+1)-(y+1);//去重,计算出去重后直线x=l的个数 
if(m<=2)return n;
int ans=0;
for(int i=1;i<m;i++){
for(int j=i+1;j<=m;j++){
int minn=y[i],maxn=y[j];//枚举上边界和下边界 
int k=0;
for(int l=1;l<=n;l++){
if(l==1||a[l].x!=a[l-1].x){
k++;//新一条直线了 
on[k]=on2[k]=0;
left1[k]=left1[k-1]+on2[k-1]-on[k-1];//计算当前这条直线
//左边(包括自己)有多少个点在上下边界上; 
}
    if(a[l].y>minn&&a[l].y<maxn)on[k]++;//计算当前直线上在上下边界(不包括)内有多少个点 
    if(a[l].y>=minn&&a[l].y<=maxn)on2[k]++;// 计算当前直线上在上下边界(包括)内有多少个点

if(k<=2)return n;//上下两条之间即可覆盖所有点则全都能被覆盖

int count1=0;
for(int l=1;l<=k;l++){
ans=max(ans,left1[l]+on2[l]+count1);//第l个直线在边界(矩阵的四条边)上左边有多少个点 
//计算前k条直线选哪个最好(算出的是那个直线上的点数) 
    count1=max(count1,on[l]-left1[l]);
}
}
}
return ans;
}

int main(){
int cases=0;
while(scanf("%d",&n)!=EOF&&n){
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
y[i]=a[i].y;
}
printf("Case %d: %d\n",++cases,solve());

return 0;
}

转载于:https://www.cnblogs.com/c201904xyorz/p/9990791.html

uva1382 Distant Galaxy相关推荐

  1. LA 3695 Distant Galaxy

    给出n个点的坐标(坐标均为正数),求最多有多少点能同在一个矩形的边界上. 题解里是构造了这样的几个数组,图中表示的很明白了. 首先枚举两条水平线,然后left[i]表示竖线i左边位于水平线上的点,on ...

  2. 【UVALive】3695 Distant Galaxy(......)

    题目 传送门:QWQ 分析 好喵啊~~~~ 不会做 正解看蓝书P53吧 代码 #include <cstdio> #include <algorithm> using name ...

  3. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  4. 爱做梦的人工智能「Stabled Diffusion」

    文章目录 开始之前 一.背景 1.1 项目速览 1.2 模型结构 1.3 参考内容 二.部署 2.1 初始化运行环境 2.2 初始化调用函数 2.3 Text To Image 2.3.1 参数配置 ...

  5. 【Blender】Stability AI插件 - AI生成图像和动画

    Stability AI 的官方插件允许 Blender 艺术家使用现有的项目和文本描述来创建新的图像.纹理和动画. 推荐:用 NSDT场景设计器 快速搭建3D场景. 1.安装Stability fo ...

  6. AI绘画(以后也叫AI视频)

    大概半年前,AI 绘画工具 Disco Diffusion 从 Text-to-Image 开发社区和设计行业,火到了普通用户的视野中.即便它界面简陋,满屏英文和代码,也"劝退"不 ...

  7. 三星电池正在获取使用模式_三星Galaxy S10系列超大电池持久动力,解决电量烦恼...

    在这个信息爆炸的时代,智能手机与移动支付几乎充斥着我们生活的每一个角落.手机上的电量一旦泛红见底,就会让人感到束手束脚.焦虑不安.确实,智能手机的普及以及锂电池技术发展的瓶颈,让人经常性的出现电量烦恼 ...

  8. c7pro android7,三星c7pro和iphone7哪个值得买?三星Galaxy c7 pro和苹果iphone7区别对比详细评测...

    三星c7 pro介绍: 三星C7 Pro 三星C7 Pro可以看作是去年底上市的三星C9 Pro低配版,屏幕变小了,硬件配置也有所降低,不过配备了骁龙625升级版的骁龙626处理器,硬件方面也是颇具看 ...

  9. galaxy android 8,三星终于正式升级安卓8.0!Galaxy S8尝鲜

    原标题:三星终于正式升级安卓8.0!Galaxy S8尝鲜 经过长时间的测试,在友商陆续吃上奥利奥之后,三星终于开始向Galaxy S8/S8+正式推送安卓8.0,也带来了新的Experience U ...

最新文章

  1. 面试官:说说Spring AOP、AspectJ、CGLIB ?它们有什么关系?
  2. 腾讯2016春季实习生(技术运营岗)招聘电话面试题汇集。
  3. app启动流程:冷启动,热启动,暖启动
  4. linux 0x00,linux 学习笔记0x00
  5. 从C语言的角度重构数据结构系列(九)-数据结构哈希表分糖果
  6. 如何测试机房的速度和带宽?
  7. (笔记)网络技术学习交流会
  8. oc c语言,OC之C语言的基础知识
  9. 【Java笔记】Java开发实战经典 - 第三章
  10. 【手记】解决Intel Management Engine Interface黄色感叹号
  11. java 极光推送_极光推送java实现
  12. 分享两个开源的成品项目,一个视频播放器,一个音乐播放器!
  13. 【Matlab图像加密】Logistic+Tent+Kent+Henon图像加密与解密【含GUI源码 1745期】
  14. Linux安装Perl(最新版)
  15. java用ssm框架开发的空气质量检测系统源码网站实战项目
  16. 如何取得UnityHub内旧版本Unity下载链接
  17. 3.1递归实现逆序输出整数
  18. 文华期货数据格式公布
  19. 关于Mac上使用百度云下载速度慢的解决方案
  20. CCF认证考试 202012-5星际旅行 (100分)(线段树)

热门文章

  1. python int函数的实现_python实现int函数的案例分析
  2. kotlin 复制对象属性_Kotlin面向对象编程笔记
  3. 禅道备份功能_禅道数据库备份
  4. 武昌工学院计算机专业学费,2016年武昌工学院学费专业收费情况及综合排名
  5. 计算机导航医学应用,计算机导航技术在口腔颌面外科应用中的新发展
  6. bootice添加linux_如何使用老毛桃winpe的Bootice工具新建实模式启动项(Grub/Linux)?
  7. 怎样有效的学会php,十天学会PHP - 序2,有效的学习方法 (20180822-1)
  8. php+select为空,SELECT时候,如何处理某字段空值?
  9. 405 not allowed什么意思_clock是什么意思
  10. 计算机组成原理试卷分析,《计算机组成原理与汇编语言》试卷分析报告.doc.docx...