NOIP 模拟 6 辣鸡
题解
难得啊,本来能 \(AC\) 的一道题,注释没删,挂了五分,难受
此题暴力很好想,就是直接 \(n^2\) 枚举不同的矩阵组合,记录块内答案和跨块的答案
出题人不会告诉你,这题只要输出块内答案就可以拿到 \(65pts\) 。
一个很简单的优化就是按 \(x_1\) 的值先排个序,然后判断
if (mat[j].x1-mat[i].x2>1) break;
但是这种玄学优化仍可以被上下一条链似的块卡掉,但良心出题人竟然没卡。
正解应该是按两维的坐标均排个序,然后二分查找,求出符合要求的块,复杂度 \(\mathcal O(nlogn)\)
我不会告诉你其实常数小的暴力其实比正解还快了一倍
Code
\(AC\kern 0.4em CODE:\)
#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
inline int read() {
ri x=0,f=1;char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
return x*f;
}
}
using IO::read;
namespace nanfeng{
#define int long long
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))
#define FI FILE *IN
#define FO FILE *OUT
#undef bool
static const int N=1e5+7;
struct Matrix{
int x1,y1,x2,y2;
friend inline bool operator<(Matrix m1,Matrix m2) {return m1.x1<m2.x1;}
Matrix(){}
Matrix(int x1,int y1,int x2,int y2):x1(x1),y1(y1),x2(x2),y2(y2){}
}mat[N];
int n,ans;
inline int calc(Matrix m) {
int res=0;
int x=m.x2-m.x1,y=m.y2-m.y1;
if (x>y) swap(x,y);
res+=(x*x<<1);
res+=(y-x)*(x<<1);
return res;
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
n=read();
for (ri i(1);i<=n;p(i)) {
int x1=read(),y1=read(),x2=read(),y2=read();
mat[i]=Matrix(x1,y1,x2,y2);
}
if (n==1) {printf("%lld\n",calc(mat[1]));return 0;}
sort(mat+1,mat+n+1);
// for (ri i(1);i<=n;p(i))
for (ri i(1);i<n;p(i)) {
ans+=calc(mat[i]);
// printf("%lld %lld %lld %lld\n",mat[i].x1,mat[i].y1,mat[i].x2,mat[i].y2);
for (ri j(i+1);j<=n;p(j)) {
if (mat[j].x1-mat[i].x2>1) break;
if (mat[j].x1-mat[i].x2==1) {
if (mat[j].y1-mat[i].y2>1||mat[i].y1-mat[j].y2>1) continue;
if (mat[j].y1-mat[i].y2==1||mat[i].y1-mat[j].y2==1) {ans+=1;continue;}
ans+=(cmin(mat[i].y2,mat[j].y2)-cmax(mat[i].y1,mat[j].y1))<<1;
if (cmax(mat[i].y2,mat[j].y2)>cmin(mat[i].y2,mat[j].y2)) ans+=1;
if (cmax(mat[i].y1,mat[j].y1)>cmin(mat[i].y1,mat[j].y1)) ans+=1;
} else if (mat[j].y1>mat[i].y2) {
if (mat[j].y1-mat[i].y2>1) continue;
ans+=(cmin(mat[i].x2,mat[j].x2)-mat[j].x1)<<1;
if (mat[i].x1<mat[j].x1) ans+=1;
if (cmax(mat[i].x2,mat[j].x2)>cmin(mat[i].x2,mat[j].x2)) ans+=1;
} else {
if (mat[i].y1-mat[j].y2>1) continue;
ans+=(cmin(mat[i].x2,mat[j].x2)-mat[j].x1)<<1;
if (mat[i].x1<mat[j].x1) ans+=1;
if (cmax(mat[i].x2,mat[j].x2)>cmin(mat[i].x2,mat[j].x2)) ans+=1;
}
// if (i==2) printf("%lld %lld %lld %lld ans=%lld\n",mat[j].x1,mat[j].y1,mat[j].x2,mat[j].y2,ans);
}
// printf("ans=%lld\n",ans);
}
// printf("%lld %lld %lld %lld\n",mat[n].x1,mat[n].y1,mat[n].x2,mat[n].y2);
printf("%lld\n",ans+calc(mat[n]));
return 0;
}
#undef int
}
int main() {return nanfeng::main();}
NOIP 模拟 6 辣鸡的更多相关文章
- noip模拟6[辣鸡·模板·大佬·宝藏]
这怕不是学长出的题吧 这题就很迷 这第一题吧,正解竟然是O(n2)的,我这是快气死了,考场上一直觉得aaaaa n2过不了过不了, 我就去枚举边了,然后调了两个小时,愣是没调出来,然后交了个暴力,就走 ...
- [CSP-S模拟测试]:辣鸡(ljh) (暴力)
题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了.然而在上化学课的时候,数学和化学都不好的$ljh$却被一道简单题难住了,受到了大佬的嘲笑.题目描述是这样的:在一个二维平面上有一层 ...
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- 7.29 NOIP模拟测试10 辣鸡(ljh)+模板(ac)+大佬(kat)
T1 辣鸡(ljh) 就是一道分类讨论的暴搜,外加一丢丢的减枝,然而我挂了,为啥呢,分类讨论变量名打错,大于小于号打反,能对才怪,写了sort为了调试就注释了,后来忘了解开,小减枝也没打.但是这道题做 ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 2019.7.29 NOIP模拟测试10 反思总结【T2补全】
这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...
- noip模拟6(T2更新
由于蒟弱目前还没调出T1和T2,所以先写T3和T4.(T1T2更完辣! update in 6.12 07:19 T3 大佬 题目描述: 他发现katarina大佬真是太强了,于是就学习了一下kata ...
- Solution Set - 神奇 NOIP 模拟赛
\[\mathfrak{\text{Defining }\LaTeX\text{ macros...}}\newcommand{\vct}[1]{\boldsymbol{#1}}\newcommand ...
随机推荐
- MySQL | MySQL5.7.* 安装
清理系统环境 清理系统环境,保证安装时没有打扰. # 查看系统是否自带 mariadb-lib rpm -qa | grep mariadb # 如果有,输出:mariadb-libs-5.5.44- ...
- Nginx PHP测试装
Nginx yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl open ...
- python 操作word
pip install python.docx from docx import DocumentDoc = Document() 解释:from 从 docx这个文件中,导入一个叫Document的 ...
- final修饰符(4)-"宏替换"
对于一个final变量来说,不管它时类变量,实例变量还是局部变量,只要满足三个条件,这个final变量就不再是一个变量,而是一个直接量.final变量的一个重要用途,就是定义"宏变量&quo ...
- [刘阳Java]_了解BeanFactory_第4讲
为什么说我们这篇文章只是说了解一下BeanFactory.因为BeanFactory内在的机制与代码实现实在是太强大了,在这一点我确实不敢滥竽充数. 1. 那么我们又如何去了解BeanFactory, ...
- Javascript闭包解析----------------v客学院技术分享
跟java,php等编程语言一样,javascript也采用词法作用域,简单的来说就是函数的执行依赖于变量的作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的.为了实现这种词法作用域,还必 ...
- odoo14在列表视图里添加自定义按钮
static/js/xxxx.js 这里定义按钮odoo.define('add.tree.view.buttons', function (require) { "use strict&q ...
- 有语言基础的人应该如何学习python?
正好最近在学python,感觉有语言基础的话更多在乎一些语法糖,毕竟其他东西在之前应该接触过了. 笔者C++是起始语言,也接触过java.js,介绍一点python的特点吧.帮助自己巩固所学,也希望能 ...
- Chrome添加 测试设备 手机iPhone x系列手机
一.F12,点击下图中的Edit,添加设备 二.添加名为iPhone XR的设备,设备配置如下 三.其中User agent string如下 Mozilla/5.0 (iPhone; CPU iPh ...
- 记录一个SQL语句 case select 1
select Code, CodeName, CodeAlias, ComCode, OtherSign from ldcode where codetype = 'edorapptype' and ...