题目描述

辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了。
然而在上化学课的时候,数学和化学都不好的$ljh$却被一道简单题难住了,受到了大佬的嘲笑。
题目描述是这样的:
在一个二维平面上有一层水分子,请问形成了多少个氢键?
这个二维平面可以看做一个类似棋盘的东西,每个格子可以容纳一个水分子,左下角的格子为$(0,0)$,这个格子右边的格子为$(1,0)$,上方格子为$(0,1)$,以此类推。
辣鸡$ljh$当然不会做了,所以他来求助$JeremyGou$,$JeremyGou$一眼就看穿了真相,并想用这道题来考一考正在做$NOIP$模拟赛的你。
注:在本题中,我们认为一个水分子能与和它曼哈顿距离为$2$且直线距离小于$2$的其他格子形成氢键。


输入格式

一个整数$n$。
接下来$n$行,每行给出四个整数$x_1,y_1,x_2,y_2$。
表示以$(x_1,y_1)$为左下角,$(x_2,y_2)$为右上角的矩形中每个格子都有一个水分子。
给出的所有矩形没有交集。


输出格式

一个整数,表示氢键的数量。


样例

样例输入1:

3
0 0 0 0
0 1 1 2
2 2 2 3

样例输出1:

5

样例输入2:

10
1 8 8 9
0 3 10 7
0 0 7 0
0 2 9 2
4 10 8 10
10 0 10 2
0 10 0 10
8 0 9 1
0 8 0 9
9 8 10 8

样例输出2:

157


数据范围与提示

样例$1$解释:

左图为水分子的排布,右图中的绿色线条表示氢键。

$N\leqslant {10}^5$。

$x\leqslant {10}^9$。

$y\leqslant {10}^9$。

自己画的样例$2\downarrow$:


题解

$15\%$算法:

开一个临接矩阵,存一下,在里面$\Theta(\max(x_{2_i},y_{2_i})^2)$跑一遍就好了。

$35\%$算法:

$\Theta(n^2)$枚举每对矩形,统计它们之间形成的贡献,在加上它们内部的贡献即可。

$65\%$算法:

$\Theta(n)$枚举每个矩形,输出它们的内部贡献,即$(x_2-x_1)\times(y_2-y_1)\times 2$,是不是很震惊?!?!

$100\%$算法:

先按$x_1$的大小排个序,然后再进行$\Theta(n^2)$进行枚举,如果$x_j-x_i>1$则$break$。

统计答案的时候分4种情况:

  $\alpha.$每个矩形自己内部的贡献。

  $\beta.$两个矩形左右相接。

  

  1. if(min(e[i].x2,e[j].x2)-max(e[i].x1,e[j].x1)>=0)
  2. {
  3. if(e[i].y2==e[j].y1-1)
  4. {
  5. ans+=(min(e[i].x2,e[j].x2)-max(e[i].x1,e[j].x1))<<1;
  6. if(e[i].x1!=e[j].x1)ans++;
  7. if(e[i].x2!=e[j].x2)ans++;
  8. }
  9. if(e[j].y2==e[i].y1-1)
  10. {
  11. ans+=(min(e[i].x2,e[j].x2)-max(e[i].x1,e[j].x1))<<1;
  12. if(e[i].x1!=e[j].x1)ans++;
  13. if(e[i].x2!=e[j].x2)ans++;
  14. }
  15. }

  $\chi.$两个矩形上下相接。

  

  1. if(min(e[i].y2,e[j].y2)-max(e[i].y1,e[j].y1)>=0)
  2. {
  3. if(e[i].x2==e[j].x1-1)
  4. {
  5. ans+=(min(e[i].y2,e[j].y2)-max(e[i].y1,e[j].y1))<<1;
  6. if(e[i].y1!=e[j].y1)ans++;
  7. if(e[i].y2!=e[j].y2)ans++;
  8. }
  9. if(e[j].x2==e[i].x1-1)
  10. {
  11. ans+=(min(e[i].y2,e[j].y2)-max(e[i].y1,e[j].y1))<<1;
  12. if(e[i].y1!=e[j].y1)ans++;
  13. if(e[i].y2!=e[j].y2)ans++;
  14. }
  15. }

  $\delta.$两个矩形对角

  

  1. if(e[i].x2==e[j].x1-1&&(e[i].y2==e[j].y1-1||e[i].y1==e[j].y2+1))ans++;

这就是正解?!?!

没错,至少出题人这么说的;而对于这道题,出题人就是老大……


代码时刻

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct rec
  4. {
  5. int x1;
  6. int y1;
  7. int x2;
  8. int y2;
  9. }e[100001];
  10. long long ans;
  11. bool cmp1(rec a,rec b){return a.x1<b.x1;}
  12. int main()
  13. {
  14. int n;
  15. scanf("%d",&n);
  16. for(register int i=1;i<=n;i++)
  17. {
  18. scanf("%d%d%d%d",&e[i].x1,&e[i].y1,&e[i].x2,&e[i].y2);
  19. ans+=1LL*(e[i].x2-e[i].x1)*(e[i].y2-e[i].y1);
  20. }
  21. ans<<=1;
  22. sort(e+1,e+n+1,cmp1);
  23. for(register int i=1;i<n;i++)
  24. for(register int j=i+1;j<=n;j++)
  25. {
  26. if(e[j].x1-e[i].x2>1)break;
  27. if(min(e[i].x2,e[j].x2)-max(e[i].x1,e[j].x1)>=0)
  28. {
  29. if(e[i].y2==e[j].y1-1)
  30. {
  31. ans+=(min(e[i].x2,e[j].x2)-max(e[i].x1,e[j].x1))<<1;
  32. if(e[i].x1!=e[j].x1)ans++;
  33. if(e[i].x2!=e[j].x2)ans++;
  34. }
  35. if(e[j].y2==e[i].y1-1)
  36. {
  37. ans+=(min(e[i].x2,e[j].x2)-max(e[i].x1,e[j].x1))<<1;
  38. if(e[i].x1!=e[j].x1)ans++;
  39. if(e[i].x2!=e[j].x2)ans++;
  40. }
  41. }
  42. if(min(e[i].y2,e[j].y2)-max(e[i].y1,e[j].y1)>=0)
  43. {
  44. if(e[i].x2==e[j].x1-1)
  45. {
  46. ans+=(min(e[i].y2,e[j].y2)-max(e[i].y1,e[j].y1))<<1;
  47. if(e[i].y1!=e[j].y1)ans++;
  48. if(e[i].y2!=e[j].y2)ans++;
  49. }
  50. if(e[j].x2==e[i].x1-1)
  51. {
  52. ans+=(min(e[i].y2,e[j].y2)-max(e[i].y1,e[j].y1))<<1;
  53. if(e[i].y1!=e[j].y1)ans++;
  54. if(e[i].y2!=e[j].y2)ans++;
  55. }
  56. }
  57. if(e[i].x2==e[j].x1-1&&(e[i].y2==e[j].y1-1||e[i].y1==e[j].y2+1))ans++;
  58. }
  59. printf("%lld",ans);
  60. return 0;
  61. }

rp++

[CSP-S模拟测试]:辣鸡(ljh) (暴力)的更多相关文章

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

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

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

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

  3. [NOIP模拟测试10]辣鸡(ljh) 题解

    首先计算块内贡献,很显然是$(x_2-x_1)*(y_2-y_1)*2$. 然后考虑矩形之间的贡献,sort一遍分类讨论$n^2$暴力即可. 注意考虑边界情况是否能多两个,以及角对角的情况. 另外,排 ...

  4. [CSP-S模拟测试]:打扫卫生(暴力)

    题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\  John$要把这 ...

  5. [CSP-S模拟测试]:String Master(暴力)

    题目描述 所谓最长公共子串,比如串$A:"abcde"$,串$B:"jcdkl"$,则它们的最长公共子串为串$"cd"$,即长度最长的字符串 ...

  6. HZOJ 辣鸡(ljh)

    题解?noipT1还需要题解?正解就是$n^2$大暴力. 考试的时候打了$n^2$的暴力,也想到了正解的优化,然而觉得它太麻烦了,而且$n^2$怎么优化也过不了50000啊,而且即使不优化前面30分我 ...

  7. NOIP 模拟 6 辣鸡

    题解 难得啊,本来能 \(AC\) 的一道题,注释没删,挂了五分,难受 此题暴力很好想,就是直接 \(n^2\) 枚举不同的矩阵组合,记录块内答案和跨块的答案 出题人不会告诉你,这题只要输出块内答案就 ...

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

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

  9. [CSP-S模拟测试]:模板(ac)(线段树启发式合并)

    题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了.他每天都被$katarina$大神虐,仗着自己学过一些姿势就给$katarina$大神出了一道题.有一棵$n$个节点的以$1$号节 ...

随机推荐

  1. 路由器桥接时,为什么要关闭 DHCP 服务器?

    问:看网上的一些教程,路由器设置无线桥接的时候,副路由器中的 DHCP 服务器需要关闭,请问这是为什么? 答:两个路由器无线桥接时,之所以要关闭副路由器的 DHCP 服务器,是为了避免 IP 地址错误 ...

  2. BusyBox TFTP使用(转)

    开发板上使用TFTP 帮助信息: BusyBox v1.13.3 (2009-03-25 15:48:45 CST) multi-call binary Usage: tftp [OPTION]... ...

  3. Spring框架学习总结

    一.Spring概述 1.什么是Spring? Spring是一个优秀轻量级的框架,是Java中使用最多的框架,Spring框架具有轻量.控制反转.面向切面.容器.框架.MVC的特点. 2.Sprin ...

  4. Java 14 可能带来什么新特性?

    JDK/Java 13 在一个月前已经发布,该版本带来了 5 大新特性,笔者观察到其中的 Text Blocks(文本块)特性似乎被讨论最多. 文本块特性与常见的 Python "" ...

  5. 使用JavaScript获取url中的参数值

    今天需要用到从url中获取参数,在网上找了几个JavaScript方法,mark下来.   一些可以使用的去获取url中指定的部分:如http://www.mystuff.com.cn/aboutus ...

  6. 搜索专题: HDU1258Sum It Up

    Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  7. 简述COOKIE和SESSION的区别与联系?

    cookie 和session 的区别:1.cookie数据存放在客户的浏览器上,session数据放在服务器上.2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 ...

  8. Serilog

    参考 asp.net core使用serilog将日志推送到腾讯云日志服务

  9. leetcode第一题(easy)

    第一题:题目内容 Given an array of integers, return indices of the two numbers such that they add up to a sp ...

  10. 【 React - 1/100 】React绑定事件this指向问题--改变state中的值

    /** * 报错: * Cannot read property 'setState' of undefined * 原因: this指向不一致.btnAddCount中的this 和render中的 ...