首先计算块内贡献,很显然是$(x_2-x_1)*(y_2-y_1)*2$.

然后考虑矩形之间的贡献,sort一遍分类讨论$n^2$暴力即可。

注意考虑边界情况是否能多两个,以及角对角的情况。

另外,排序之后可以通过剪枝排除无用情况(j从i+1开始枚举以及那个break)来实现$n^2$过十万的梦想

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5+;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct block
{
int x,y,xx,yy;
}s[N];
int cmp2 (block a,block b)
{
//if(a.x==b.x)return a.xx<b.xx;
return a.x<b.x;
}
int abss(int val)
{
return val>=?val:-val;
}
int n;
ll ans;
int main()
{
n=read();
for(int i=;i<=n;i++)
s[i].x=read(),s[i].y=read(),s[i].xx=read(),s[i].yy=read(),ans+=2LL*(s[i].xx-s[i].x)*(s[i].yy-s[i].y);
// cout<<ans<<endl;
sort(s+,s+n+,cmp2);
for(int i=;i<=n;i++)
{
for(int j=i+;j<=n;j++)
{
if(s[j].x>s[i].xx+)break;
if(((s[j].xx+==s[i].x)||(s[j].x-==s[i].xx))&&((s[j].y-==s[i].yy)||(s[j].yy+==s[i].y)))ans++;
else if(s[j].xx+==s[i].x||s[j].x-==s[i].xx)
{
if(s[j].yy<=s[i].yy&&s[j].y>=s[i].y)
{
ans+=2LL*(s[j].yy-s[j].y);
if(s[i].yy>s[j].yy)ans++;
if(s[i].y<s[j].y)ans++;
}
else if(s[j].yy>s[i].yy&&s[j].y<s[i].y)
{
ans+=2LL*(s[i].yy-s[i].y)+;
}
else if(s[j].y>=s[i].y&&s[j].y<=s[i].yy)
{
ans+=2LL*(s[i].yy-s[j].y);
if(s[j].yy>s[i].yy)ans++;
if(s[j].y>s[i].y)ans++;
}
else if(s[j].yy>=s[i].y&&s[j].yy<=s[i].yy)
{
ans+=2LL*(s[j].yy-s[i].y);
if(s[j].yy<s[i].yy)ans++;
if(s[j].y<s[i].y)ans++;
}
}
else if(s[j].y==s[i].yy+||s[j].yy+==s[i].y)
{
if(s[i].x<=s[j].x&&s[i].xx>=s[j].xx)
{
ans+=2LL*(s[j].xx-s[j].x);
if(s[j].x>s[i].x)ans++;
if(s[j].xx<s[i].xx)ans++;
}
else if(s[i].x>s[j].x&&s[i].xx<s[j].xx)
{
ans+=2LL*(s[i].xx-s[i].x)+;
}
else if(s[j].x>=s[i].x&&s[j].x<=s[i].xx)
{
ans+=2LL*(s[i].xx-s[j].x);
if(s[j].x>s[i].x)ans++;
if(s[j].xx>s[i].xx)ans++;
}
else if(s[j].xx>=s[i].x&&s[j].xx<=s[i].xx)
{
ans+=2LL*(s[j].xx-s[i].x);
if(s[j].x<s[i].x)ans++;
if(s[j].xx>s[i].xx)ans++;
}
}
}
}
cout<<ans<<endl;
return ;
}

[NOIP模拟测试10]辣鸡(ljh) 题解的更多相关文章

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

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

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

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

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

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

  4. noip模拟测试10

    T1 这道题在考场上想到了二维前缀和,就是自己算前缀和的方式有点麻烦,导致花的时间较长,但还是成功搞了出来. 因为暴力计算的话需要不停枚举左上角和右下角的 i ,j, 时间复杂度为 n^4 ,我当时就 ...

  5. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

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

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

  7. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  8. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  9. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

随机推荐

  1. vue基础八

    表单控件绑定 1.基础用法 你可以用 v-model 指令在表单控件元素上创建双向数据绑定.尽管有些神奇,但 v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端 ...

  2. 【Dart学习】--Dart之字符串(String)的相关方法总结

    字符串定义使用单引号或双引号 String a = "abcdefg"; String b = '; 创建多行字符串,保留内在格式使用三个单引号或三个双引号 创建多行字符串,保留内 ...

  3. BZOJ 4619: [Wf2016]Swap Space(贪心)

    传送门 解题思路 首先肯定是先处理\(b>a\)的,这样可以获得更多空间.处理时要先处理\(a\)比较小的,再处理\(a\)比较大的,因为要求最小值,而\(b>a\)的总量是确定的,那么就 ...

  4. express设置允许跨域访问该服务.

    const express = require('express');const app = express(); //设置允许跨域访问该服务.app.all('*', function (req, ...

  5. vue之slot用法

    slot元素作为组件模板之中的内容分发插槽.这个元素自身将被替换. 有 name 特性的 slot 称为具名 slot. 有 slot 特性的内容将分发到名字相匹配的具名 slot. 一.单个组件 如 ...

  6. sync.Once.Do(f func())

    sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次. package mai ...

  7. PHP面试 javascript和jQuery 基础

    JavaScript基础 JavaScript语法 变量的定义:变量必须以字母开头   可以使用$和 _ 符号开头  变量名称对大小写敏感 使用 var 关键词声明变量   可以一次声明多个变量    ...

  8. Gradle教程

    Ant和Maven共享在Java市场上相当大的成功.ANT是在2000年发布了第一个版本的工具,它是基于程序编程思想的发展. 后来,人们在 Apache-Ivy的帮助下,网络接受插件和依赖管理的能力有 ...

  9. 利用HTML制作一个简单的界面(工具HBuilder)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"><!--标题,里面填写 ...

  10. Synchronized 与 ReentrantLock 的区别!

    来源:cnblogs.com/baizhanshi/p/7211802.html 之前栈长分享了重入锁的概念:<到底什么是重入锁,拜托,一次搞清楚!>,今天现来深入了解下 Synchron ...