https://beta.atcoder.jp/contests/abc075/tasks/abc075_d

题意:

给出坐标平面上n个点的坐标,要求找到一个面积最小的矩形使得这个矩形的边界加上内部的点的数量大于等于k。

思路:

由于坐标过大,所以离散化。

离散化之后用前缀和,但是Orz求前缀和的时候写错了。

枚举左下角和右上角的坐标,分别为(i,j)和(s,e)。

那么点的数量为sum[s][e] - sum[s][j-1] - sum[i-1][q] + sum[i-1][j-1],切记,切记,画图画图。

代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. #include <map>
  5. using namespace std;
  6.  
  7. struct node
  8. {
  9. int x,y;
  10. } a[];
  11.  
  12. map<int,int> mpx,mpy;
  13. map<int,int> invx,invy;
  14.  
  15. int sum[][];
  16. int b[][];
  17.  
  18. bool cmp1(node aa,node bb)
  19. {
  20. return aa.x < bb.x;
  21. }
  22.  
  23. bool cmp2(node aa,node bb)
  24. {
  25. return aa.y < bb.y;
  26. }
  27.  
  28. int main()
  29. {
  30. int n,k;
  31.  
  32. scanf("%d%d",&n,&k);
  33.  
  34. for (int i = ;i <= n;i++)
  35. {
  36. scanf("%d%d",&a[i].x,&a[i].y);
  37. }
  38.  
  39. long long ans;
  40.  
  41. sort(a+,a+n+,cmp1);
  42.  
  43. for (int i = ;i <= n;i++)
  44. {
  45. invx[i] = a[i].x;
  46. mpx[a[i].x] = i;
  47. }
  48.  
  49. long long dx = a[n].x - a[].x;
  50.  
  51. sort(a+,a+n+,cmp2);
  52.  
  53. for (int i = ;i <= n;i++)
  54. {
  55. invy[i] = a[i].y;
  56. mpy[a[i].y] = i;
  57. }
  58.  
  59. long long dy = a[n].y - a[].y;
  60.  
  61. ans = dx * dy;
  62.  
  63. for (int i = ;i <= n;i++)
  64. {
  65. int x = a[i].x,y = a[i].y;
  66.  
  67. b[mpx[x]][mpy[y]] = ;
  68. }
  69.  
  70. for (int i = ;i <= n;i++)
  71. for (int j = ;j <= n;j++)
  72. {
  73. sum[i][j] = sum[i-][j] + sum[i][j-] - sum[i-][j-] + b[i][j];
  74. }
  75.  
  76. for (int i = ;i <= n;i++)
  77. for (int j = ;j <= n;j++)
  78. {
  79. for (int s = i;s <= n;s++)
  80. for (int q = j;q <= n;q++)
  81. {
  82. if (sum[s][q] - sum[s][j-] - sum[i-][q] + sum[i-][j-] >= k)
  83. {
  84. long long dx = invx[s] - invx[i];
  85. long long dy = invy[q] - invy[j];
  86.  
  87. long long tmp = abs(dx) * abs(dy);
  88.  
  89. ans = min(ans,tmp);
  90. }
  91. }
  92. }
  93.  
  94. printf("%lld\n",ans);
  95.  
  96. return ;
  97. }

AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle的更多相关文章

  1. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  2. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

  3. [日常] AtCoder Beginner Contest 075 翻车实录

    别问我为啥要写一篇ABC的游记... 周日打算CF开黑于是就打算先打打ABC找回手速... 进场秒掉 $A$ 和 $B$ , 小暴力一脸偷税 然后开 $C$ ...woc求桥? 怎么办啊我好像突然忘了 ...

  4. AtCoder Beginner Contest 075 C Bridge(割边)

    求割边个数.Tarjan的板子.. #include <bits/stdc++.h> using namespace std; const int MAXN = 55; const int ...

  5. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  6. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  7. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  8. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  9. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

随机推荐

  1. xlsx导入成--json

    这两天遇到大难题了,就是这个   xlsx   导入问题,之前用的xlsx.full.min.js,写的导入,结果不兼容ie浏览器,研究这个也好长时间,网上居然还没有搜到合适的,自己写从xlsx官网上 ...

  2. 20165226 学习基础和C语言基础调查

    心得体会 驱动迭代 学习是一个老师与学生互动的过程,二者关系又恰如健身教练与学员,在进行基础知识的培训后还需借助工具加强相关方面的训练.学习提升的过程离不开学生在实践中发现问题并在老师的帮助下解决问题 ...

  3. ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET ...

  4. spring Boot+spring Cloud实现微服务详细教程第一篇

    前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...

  5. 剑指Kubernetes 揭秘腾讯云的PaaS技术选型策略

    1.前言 Kubernetes 很火,一大批互联网公司早已领先一步,搭建起专有的 PaaS平台,传统企业们看到的 Kubernetes的趋势,亦不甘落后,在试水的道上一路狂奔-- 虽然,Kuberne ...

  6. python基础学习笔记二之列表

    1.列表 ①列表的创建: ②列表的查询(索引): ③列表的切片操作: 此处要注意到:返回索引0到3的元素,顾头不顾尾. ④列表的增加: s.append()  #直接在结尾追加 s.insert()  ...

  7. 漫谈Java IO之基础篇

    Java的网络编程如果不是专门搞服务器性能开发或者消息分发,几乎可能涉及不到.但是它却是面试找工作必问的一个知识点,涵盖的知识体系也非常广泛,从Java底层IO原理到操作系统内核组成,再到网络TCP. ...

  8. Java多线程:乐观锁、悲观锁、自旋锁

    悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据 ...

  9. 路径字符串数据转化为树型层级对象,path to json tree

    由于项目中使用了react 及 ant-design ,在使用tree树型控件时,需要 类似下面的数据, const treeData = [{ title: '0-0', key: '0-0', c ...

  10. git常用命令速查

    创建 $ git init  #在当前目录下创建一个空的本地仓库 $ rm -rf  .git  #删除本地仓库 $ git add .  #把当前目录下的所有文件添加到暂存区 $ git commi ...