HZOJ 辣鸡(ljh)
题解?noipT1还需要题解?正解就是$n^2$大暴力。
考试的时候打了$n^2$的暴力,也想到了正解的优化,然而觉得它太麻烦了,而且$n^2$怎么优化也过不了50000啊,而且即使不优化前面30分我也能拿到。
然而就把正解放弃了……完戏。
然而这题ifelse打的我好恶心啊……
ps.linux终端还是挺良心的,y1给我报错了,不然凉凉……
题解:
一个方块内部的贡献为:abs(x1(i)-x2(i))*abs(y1(i)-y2(i))*2;
然后$n^2$考虑方块间的贡献。
直接枚举肯定会T,考虑将输入排序,当不符合条件是break,居然快了这么多。
有一个坑点:
开始我写的是:else if(x1(j)>x2(i)&&y1(j)>y2(i))break;
但其实:else if(x1(j)>x2(i))break;就可以了。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define MAXN 100010
#define LL long long
#define int LL
#define max(a,b) ((a)>(b)?(a):(b))
#define ma(x,y) memset(x,y,sizeof(x))
using namespace std;
int n,maxn,maxy;
int map[][];
struct ques
{
int x1,x2,ty1,ty2;
#define x1(i) que[i].x1
#define x2(i) que[i].x2
#define ty1(i) que[i].ty1
#define ty2(i) que[i].ty2
friend bool operator < (ques a,ques b)
{
return a.x1==b.x1?a.ty1<b.ty1:a.x1<b.x1;
}
}que[MAXN];
inline int read();
void QJ2();
signed main()
{
n=read();
for(int i=;i<=n;i++)
x1(i)=read(),ty1(i)=read(),x2(i)=read(),ty2(i)=read();
QJ2();
}
inline int read()
{
int s=;char a=getchar();
while(a<''||a>'')a=getchar();
while(a>=''&&a<=''){s=s*+a-'';a=getchar();}
return s;
}
void QJ2()
{
sort(que+,que+n+);
LL ans=;
for(int i=;i<=n;i++)
ans+=1ll*abs(x1(i)-x2(i))*abs(ty1(i)-ty2(i))*;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
if(i!=j)
{
if(ty1(j)==ty2(i)+)//j上
{
int ttt=min(x2(j),x2(i))-max(x1(j),x1(i))+;
if(ttt>)
{
ans+=(ttt-)*;
if(abs(x1(i)-x1(j))>)ans++;
if(abs(x2(i)-x2(j))>)ans++;
}
else if(abs(x1(i)-x1(j))==||abs(x2(i)-x2(j))==)ans++;
}
else if(ty2(j)==ty1(i)-)//j下
{
int ttt=min(x2(j),x2(i))-max(x1(j),x1(i))+;
if(ttt>)
{
ans+=(ttt-)*;
if(abs(x1(i)-x1(j))>)ans++;
if(abs(x2(i)-x2(j))>)ans++;
}
else if(abs(x1(i)-x1(j))==||abs(x2(i)-x2(j))==)ans++;
}
else if(x2(j)==x1(i)-)//j左
{
int ttt=min(ty2(j),ty2(i))-max(ty1(j),ty1(i))+;
if(ttt>)
{
ans+=(ttt-)*;
if(abs(ty1(i)-ty1(j))>)ans++;
if(abs(ty2(i)-ty2(j))>)ans++;
}
}
else if(x1(j)==x2(i)+)//j右
{
int ttt=min(ty2(j),ty2(i))-max(ty1(j),ty1(i))+;
if(ttt>)
{
ans+=(ttt-)*;
if(abs(ty1(i)-ty1(j))>)ans++;
if(abs(ty2(i)-ty2(j))>)ans++;
}
}
else if(x1(j)>x2(i)&&ty1(j)>ty2(i))break;
}
}
printf("%lld\n",ans);
exit();
}
HZOJ 辣鸡(ljh)的更多相关文章
- 7.29 NOIP模拟测试10 辣鸡(ljh)+模板(ac)+大佬(kat)
T1 辣鸡(ljh) 就是一道分类讨论的暴搜,外加一丢丢的减枝,然而我挂了,为啥呢,分类讨论变量名打错,大于小于号打反,能对才怪,写了sort为了调试就注释了,后来忘了解开,小减枝也没打.但是这道题做 ...
- [CSP-S模拟测试]:辣鸡(ljh) (暴力)
题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了.然而在上化学课的时候,数学和化学都不好的$ljh$却被一道简单题难住了,受到了大佬的嘲笑.题目描述是这样的:在一个二维平面上有一层 ...
- [NOIP模拟测试10]辣鸡(ljh) 题解
首先计算块内贡献,很显然是$(x_2-x_1)*(y_2-y_1)*2$. 然后考虑矩形之间的贡献,sort一遍分类讨论$n^2$暴力即可. 注意考虑边界情况是否能多两个,以及角对角的情况. 另外,排 ...
- noip模拟6[辣鸡·模板·大佬·宝藏]
这怕不是学长出的题吧 这题就很迷 这第一题吧,正解竟然是O(n2)的,我这是快气死了,考场上一直觉得aaaaa n2过不了过不了, 我就去枚举边了,然后调了两个小时,愣是没调出来,然后交了个暴力,就走 ...
- JVM 辣鸡回收
垃圾回收算法 标记清除法 先标记出需要回收的对象,然后一次性回收.缺点:会产生内存碎片,并且效率也不高. 标记压缩法 先标记出需要回收的对象,然后让存活对象向一端移动,移动的过程中进行回收辣鸡.避免了 ...
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- bzoj2141排队(辣鸡但是好写的方法)
题意很明确,也非常经典: 一个支持查询 区间中比k大的数的个数 并且支持单点修改的序列 ——因为题意可以转化为:查询这两个数中比后者大的个数.比后者小的个数.比前者大的个数.比前者小的个数(根据这4个 ...
- SA的一个辣鸡trick
基础板子 namespace SA{ int x[400010],y[400010],SA[400010],rk[400010],ht[400010],t[400010]; int st[19][40 ...
- 辣鸡蒟蒻Klaier的一些计划
需要熟练的东西:cdq分治,堆,树链剖分,tarjan及其它一些图论算法,网络流,kmp,字符串哈希,线段树主席树,树状数组,斜率优化dp 需要学的东西:lct,后缀数组,AC自动机,平衡树 球队收益 ...
随机推荐
- Django中的orm的惰性机制
惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象)[https://www.cnblogs.com/chaojiying ...
- 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
原文:使用Docker 安装Elasticsearch.Elasticsearch-head.IK分词器 和使用 Elasticsearch的安装 一.elasticsearch的安装 1.镜像拉取 ...
- round 469
第一次打codeforces,还是太菜了 代码全部来自大神void_f C #include <cstdio> #include <vector> #include <c ...
- Linux部署教育云平台测试环境总结
2016年10月16日换了新公司,刚进公司就要进行平台测试环境部署,由于之前Linux用的比较少,只用过几个简单的杀进程.重启tomcat.查看日志等简单的操作命令,真要在LInux服务器上部署环境的 ...
- day18 14.连接池介绍
数据源在软件编程行业有两种概念:一种数据源指的是存储数据的源头(数据库啊文件啊叫数据源),一种指的是连接池(连接池的英文单词叫做DataSource,直译就是数据源).数据源可以指数据库,也可以指连接 ...
- 洛谷P1147 连续自然数和 [2017年6月计划 数论01]
P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...
- GYM 101981E(开关反转性质)
要点 做法是删去连续的k个0或k个1,连消.消消乐的那种,网上博主用个栈\(O(n)\)就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以 ...
- config.js配置页面中的样式和图片路径
这个文章用在什么地方,我先说一下,上周啊,我接到一个任务.因为公司业务要对接不同的银行,例如在工行下颜色是红色的,在其他银行下默认为蓝色,所以在页面一致的情况下,保证页面中的按钮和ICON是可以配置的 ...
- 浅谈mybatis中#{}和${}的区别
#{}:表示占位符,如果获取简单类型,#{}中可以使用value或其它名称.有效防止sql注入.使用#{}设置参数无需考虑参数的类型. 如果使用#{}比较日期字段,select* from table ...
- python中的True和False
返回真假时,需要为: return True return False