[NOIP模拟测试10]辣鸡(ljh) 题解
首先计算块内贡献,很显然是$(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+5; int read() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';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>=0?val:-val; } int n; ll ans; int main() {n=read();for(int i=1;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+1,s+n+1,cmp2);for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(s[j].x>s[i].xx+1)break; if(((s[j].xx+1==s[i].x)||(s[j].x-1==s[i].xx))&&((s[j].y-1==s[i].yy)||(s[j].yy+1==s[i].y)))ans++;else if(s[j].xx+1==s[i].x||s[j].x-1==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)+2;}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+1||s[j].yy+1==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)+2;}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 0; }
转载于:https://www.cnblogs.com/Rorschach-XR/p/11267559.html
[NOIP模拟测试10]辣鸡(ljh) 题解相关推荐
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- [CSP-S模拟测试]:辣鸡(ljh) (暴力)
题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的$ljh$却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的: 在一个二维平面上 ...
- 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)
[题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- NOIP模拟(10.22)T2 杆子的排列
杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...
- 2019.8.10 NOIP模拟测试16 反思总结【基本更新完毕忽视咕咕咕】
一如既往先放代码,我还没开始改- 改完T1滚过来了,先把T1T2的题解写了[颓博客啊] 今天下午就要走了,没想到还有送行的饯别礼,真是欣喜万分[并没有] 早上刚码完前面的总结,带着不怎么有希望的心情开 ...
- NOIP模拟赛10 题解
t3: 题意 给你一棵树,然后每次两种操作:1.给一个节点染色 : 2. 查询一个节点与任意已染色节点 lca 的权值的最大值 分析 考虑一个节点被染色后的影响:令它的所有祖先节点(包括自身)的所有除 ...
- 8.10 NOIP模拟测试16 Blue+Weed+Drink
T1 Blue 贪心,每次跳得时候跳能跳到的最远的地方,跳过的就把他设为0,每次二分找到位置,一直跳就行,如果能跳到的位置就是当前位置或比当前位置还小(数组里现在呆着的这一块石头,二分得到的就是当前位 ...
- [NOIP模拟测试34]反思+题解
不要陷入思维定势,如果长时间没有突破就要考虑更改大方向. 不要把简单问题复杂化. 做完的题就先放下,不管能拿多少分.不能过一段时间就回来调一下. $Solutions:$ A.次芝麻 因为$n+m$始 ...
最新文章
- MIT机器狗再进化,碎石冰面上跑也不打滑,这次真的稳如狗了
- 【云栖大会夺宝攻略】在线PK、打卡领奖、抢offer,开发者专属玩法在这里
- ubuntu14.04安装hadoop2.7.1伪分布式和错误解决
- 产品经理之深度学习促进产品
- Github 再现失误:部分用户密码明文暴漏
- java file文件删除_Java File.delete 删除文件
- 点与点集:边界点与聚点的关系【高等数学】
- cad画正弦曲线lisp_cadlisp基础教程.pdf
- RPG游戏制作-03-人物行走及A*寻路算法
- HTML标签与CSS样式
- linux vim输入法切换,完美解决Mac下Vim/Emacs的输入法切换问题
- 基于python和高德地图租房系统的设计与实现
- 联想小新Pro 16频繁蓝屏解决方案
- esp8266最小系统似乎是可以直接用起来接在飞控上的
- mpvue 引入weui
- 离线百度地图,QT添加按钮点击切换卫星地图和街道地图
- SAP VT实习(钻石级杰出人才计划)面经SAP大致介绍
- win7家庭版和旗舰版区别_WIN7_64位系统安装 MicroWIN_SP9后没有PC-PPI通讯协议怎么处理?...
- 嫦娥四号完成人类首次月面生物实验 月球长出第一株嫩芽
- Floyd最小环算法