题解

难得啊,本来能 \(AC\) 的一道题,注释没删,挂了五分,难受

此题暴力很好想,就是直接 \(n^2\) 枚举不同的矩阵组合,记录块内答案和跨块的答案

出题人不会告诉你,这题只要输出块内答案就可以拿到 \(65pts\) 。

一个很简单的优化就是按 \(x_1\) 的值先排个序,然后判断

if (mat[j].x1-mat[i].x2>1) break;

但是这种玄学优化仍可以被上下一条链似的块卡掉,但良心出题人竟然没卡。

正解应该是按两维的坐标均排个序,然后二分查找,求出符合要求的块,复杂度 \(\mathcal O(nlogn)\)

我不会告诉你其实常数小的暴力其实比正解还快了一倍

Code

\(AC\kern 0.4em CODE:\)

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. #define p(i) ++i
  4. using namespace std;
  5. namespace IO{
  6. char buf[1<<21],*p1=buf,*p2=buf;
  7. #define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
  8. inline int read() {
  9. ri x=0,f=1;char ch=gc();
  10. while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}
  11. while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
  12. return x*f;
  13. }
  14. }
  15. using IO::read;
  16. namespace nanfeng{
  17. #define int long long
  18. #define cmax(x,y) ((x)>(y)?(x):(y))
  19. #define cmin(x,y) ((x)>(y)?(y):(x))
  20. #define FI FILE *IN
  21. #define FO FILE *OUT
  22. #undef bool
  23. static const int N=1e5+7;
  24. struct Matrix{
  25. int x1,y1,x2,y2;
  26. friend inline bool operator<(Matrix m1,Matrix m2) {return m1.x1<m2.x1;}
  27. Matrix(){}
  28. Matrix(int x1,int y1,int x2,int y2):x1(x1),y1(y1),x2(x2),y2(y2){}
  29. }mat[N];
  30. int n,ans;
  31. inline int calc(Matrix m) {
  32. int res=0;
  33. int x=m.x2-m.x1,y=m.y2-m.y1;
  34. if (x>y) swap(x,y);
  35. res+=(x*x<<1);
  36. res+=(y-x)*(x<<1);
  37. return res;
  38. }
  39. inline int main() {
  40. // FI=freopen("nanfeng.in","r",stdin);
  41. // FO=freopen("nanfeng.out","w",stdout);
  42. n=read();
  43. for (ri i(1);i<=n;p(i)) {
  44. int x1=read(),y1=read(),x2=read(),y2=read();
  45. mat[i]=Matrix(x1,y1,x2,y2);
  46. }
  47. if (n==1) {printf("%lld\n",calc(mat[1]));return 0;}
  48. sort(mat+1,mat+n+1);
  49. // for (ri i(1);i<=n;p(i))
  50. for (ri i(1);i<n;p(i)) {
  51. ans+=calc(mat[i]);
  52. // printf("%lld %lld %lld %lld\n",mat[i].x1,mat[i].y1,mat[i].x2,mat[i].y2);
  53. for (ri j(i+1);j<=n;p(j)) {
  54. if (mat[j].x1-mat[i].x2>1) break;
  55. if (mat[j].x1-mat[i].x2==1) {
  56. if (mat[j].y1-mat[i].y2>1||mat[i].y1-mat[j].y2>1) continue;
  57. if (mat[j].y1-mat[i].y2==1||mat[i].y1-mat[j].y2==1) {ans+=1;continue;}
  58. ans+=(cmin(mat[i].y2,mat[j].y2)-cmax(mat[i].y1,mat[j].y1))<<1;
  59. if (cmax(mat[i].y2,mat[j].y2)>cmin(mat[i].y2,mat[j].y2)) ans+=1;
  60. if (cmax(mat[i].y1,mat[j].y1)>cmin(mat[i].y1,mat[j].y1)) ans+=1;
  61. } else if (mat[j].y1>mat[i].y2) {
  62. if (mat[j].y1-mat[i].y2>1) continue;
  63. ans+=(cmin(mat[i].x2,mat[j].x2)-mat[j].x1)<<1;
  64. if (mat[i].x1<mat[j].x1) ans+=1;
  65. if (cmax(mat[i].x2,mat[j].x2)>cmin(mat[i].x2,mat[j].x2)) ans+=1;
  66. } else {
  67. if (mat[i].y1-mat[j].y2>1) continue;
  68. ans+=(cmin(mat[i].x2,mat[j].x2)-mat[j].x1)<<1;
  69. if (mat[i].x1<mat[j].x1) ans+=1;
  70. if (cmax(mat[i].x2,mat[j].x2)>cmin(mat[i].x2,mat[j].x2)) ans+=1;
  71. }
  72. // if (i==2) printf("%lld %lld %lld %lld ans=%lld\n",mat[j].x1,mat[j].y1,mat[j].x2,mat[j].y2,ans);
  73. }
  74. // printf("ans=%lld\n",ans);
  75. }
  76. // printf("%lld %lld %lld %lld\n",mat[n].x1,mat[n].y1,mat[n].x2,mat[n].y2);
  77. printf("%lld\n",ans+calc(mat[n]));
  78. return 0;
  79. }
  80. #undef int
  81. }
  82. int main() {return nanfeng::main();}

NOIP 模拟 6 辣鸡的更多相关文章

  1. noip模拟6[辣鸡·模板·大佬·宝藏]

    这怕不是学长出的题吧 这题就很迷 这第一题吧,正解竟然是O(n2)的,我这是快气死了,考场上一直觉得aaaaa n2过不了过不了, 我就去枚举边了,然后调了两个小时,愣是没调出来,然后交了个暴力,就走 ...

  2. [CSP-S模拟测试]:辣鸡(ljh) (暴力)

    题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了.然而在上化学课的时候,数学和化学都不好的$ljh$却被一道简单题难住了,受到了大佬的嘲笑.题目描述是这样的:在一个二维平面上有一层 ...

  3. NOIP模拟测试10「大佬·辣鸡·模板」

    大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...

  4. 7.29 NOIP模拟测试10 辣鸡(ljh)+模板(ac)+大佬(kat)

    T1 辣鸡(ljh) 就是一道分类讨论的暴搜,外加一丢丢的减枝,然而我挂了,为啥呢,分类讨论变量名打错,大于小于号打反,能对才怪,写了sort为了调试就注释了,后来忘了解开,小减枝也没打.但是这道题做 ...

  5. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  6. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  7. 2019.7.29 NOIP模拟测试10 反思总结【T2补全】

    这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...

  8. noip模拟6(T2更新

    由于蒟弱目前还没调出T1和T2,所以先写T3和T4.(T1T2更完辣! update in 6.12 07:19 T3 大佬 题目描述: 他发现katarina大佬真是太强了,于是就学习了一下kata ...

  9. Solution Set - 神奇 NOIP 模拟赛

    \[\mathfrak{\text{Defining }\LaTeX\text{ macros...}}\newcommand{\vct}[1]{\boldsymbol{#1}}\newcommand ...

随机推荐

  1. buu 达芬奇 && ROT

    一.达芬奇 百度了下电影简介,发现了斐波那契数列,同时发现密文是由斐波那契数列移动而来的,有点像base64变种 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 ...

  2. Acunetix临时扫描是不够的

    Web漏洞扫描程序通常被视为即席工具.最初,所有漏洞扫描程序都是这种工具,并且当前的开源Web应用程序安全解决方案仍遵循该模型.但是,随着Web技术的复杂性和可用性的大幅增加,临时模型已经过时,无法满 ...

  3. css--filter(滤镜) 属性

    前言 前段时间找工作面试官问到一个问题,你如何将一个网页整体置灰?面试遇到这样的问题,一下束手无策,之前没有接触过这样的需求,因此没有回答上来,面试结束我才知道了这是考查对 CSS3 的新属性的了解. ...

  4. Lua表达式

    目录 算术运算符 关系运算符 逻辑运算符 字符串连接(more) string.format转义符的使用 优先级 算术运算符 Lua 的算术运算符如下表所示: 示例代码:$expr1.lua prin ...

  5. 三、k8s集群可用性验证与调参(第一章、k8s高可用集群安装)

    作者:北京小远 出处:http://www.cnblogs.com/bj-xy/ 参考课程:Kubernetes全栈架构师(电脑端购买优惠) 文档禁止转载,转载需标明出处,否则保留追究法律责任的权利! ...

  6. 夏壹队——nabcd

    我们团队项目名称是TD校园通,无课表查询你作为主要功能,是一个亮眼的功能. 我们的无课表查询功能主要解决大家平时上自习还要到教学楼拍照,教室课程情况也有断更的时候,而这个功能就解决大家的这个功能,能够 ...

  7. Java的代理模式

    最近在学习Spring,关于Spring AOP的代理模式不是很了解,看了一篇博文就懂了. https://www.cnblogs.com/cenyu/p/6289209.html Java的三种代理 ...

  8. Kettle——shell交互命令

    Kettle--shell交互命令 在kettle上开发了job或transform可以以单独的文件存在,也可以存放在资源库中.调用这些程序可以通过shell脚本调用,记录下: 资源库中的job: . ...

  9. Pytest单元测试框架之parametrize参数化

    1.参数化的本质:相同的步骤,但测试数据不同,比如登录的场景 import mathimport pytest# 方式一:分离出Listdef list_Test(): list = [ [2, 2, ...

  10. python -- 负数平方根-虚数的使用

    负数的平方根是虚数. 不能使用sqrt,因为它只能处理浮点数,而虚数是完全不同的--这也是由另外一个叫做cmath(即 complex math, 复数)的模块来实现这些功能的原因. >> ...