[题解] 2019牛客暑期多校第三场H题 Magic Line
题目链接:https://ac.nowcoder.com/acm/contest/883/H
题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分。
题解:对这n个点以x为第一关键字,y为第二关键字从小到大排序。找到最中间两个点。然后以这两个点为界限,将平面划分为左右两个点数相同的区域。如图所示。

由于题目中给出点的坐标绝对值≤1000,而我们需要给出的点的坐标范围为1e9,因此必定可以找到这样一条很陡的直线。
AC代码:
#include <bits/stdc++.h>
#define SIZE 1007
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
typedef long long ll;
ll n, m, t;
struct Point {
int x, y;
}p[SIZE];
double xx, yy;
bool cmpx(Point a, Point b) {
if (a.x == b.x) return a.y < b.y;
else return a.x < b.x;
}
int mm = 1e4;
int main() {
cin >> t;
while (t--) {
cin >> n;
double tx1, tx2, ty1, ty2;
rep(i, 1, n) cin >> p[i].x >> p[i].y;
sort(p + 1, p + n + 1, cmpx);
tx1 = p[(n / 2)].x, ty1 = p[(n / 2)].y; //中间的两个点
tx2 = p[(n + 2) / 2].x, ty2 = p[(n + 2) / 2].y;
double mx = 0.5 * (tx1 + tx2), my = 0.5 * (ty1 + ty2); //中点坐标
int rx1 = 0, rx2 = 0, ry1 = 0, ry2 = 0;
if ((floor(mx) == floor(mx + 0.6))) rx1 = mx - 1, rx2 = mx + 1; //把中点的x坐标偏移到最近的整数x坐标轴
else {
rx1 = floor(mx);
rx2 = rx1 + 1;
}
if ((floor(my) == floor(my + 0.6))) ry1 = my + mm, ry2 = my - mm; //y坐标偏移
else {
ry1 = floor(my) + 1 + mm;
ry2 = floor(my) - mm;
}
cout << rx1 << ' ' << ry1 << ' ' << rx2 << ' ' << ry2 << endl;
}
return 0;
}
总结:赛场上由于忘记正负数使用int取整的结果不同,没用floor函数取整,导致罚时++,今后务必避免。
[题解] 2019牛客暑期多校第三场H题 Magic Line的更多相关文章
- 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...
- 【2019牛客暑期多校第三场】J题LRU management
题目链接 题意 好吧,这道题我其实看都没看过,队友跟我说了说这道题是模拟题,卡时间.然后我就上了-- 大致就是维护一个线性表,然后有两种操作:插入.查询 插入时,如果这个值(string)之前出现过, ...
- 2019牛客暑期多校第六场题解ABDJ
A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h ...
- 2019牛客暑期多校第五场题解ABGH
A.digits 2 传送门 题意:给你一个n,要求输出一个每一位数字之和能整除n且其本身也能整除n的数.n不超过100,要求的数不超过10000位数. 题解:直接将n输出n次. 代码: #inclu ...
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem
题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3 4 2 3 4 输出:0 0 1 题解: 认真想一 ...
- 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)
题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...
- 2019牛客全国多校第八场A题 All-one Matrices(单调栈)
题意:让你找最大不可扩展全1子矩阵的数量: 题解:考虑枚举每一行为全1子矩阵的的底,然后从左到右枚举:up[i][j]:表示(i,j)这个位置向上可扩展多少,同时还有记录每个位置(i,j)向左最多可扩 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
随机推荐
- 三剑客-sed awk
目录 1.sed 2.awk 1.sed //sed命令 #语法说明:命令 参数 条件+处理= (指令) 处理文件信息 字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作 ). 擅长对行进 ...
- JVM的前世今生
前世 jvm的数据区 分别是方法区(Method Area),Java栈(Java stack),本地方法栈(Native Method Stack),堆(Heap),程序计数器(Program Co ...
- OpenCV离散傅里叶变换
离散傅里叶变换 作用:得到图像中几何结构信息 结论:傅里叶变换后的白色部分(即幅度较大的低频部分),表示的是图像中慢变化的特性,或者说是灰度变化缓慢的特性(低频部分). 傅里叶变换后的黑色部分(即幅度 ...
- Android开发实战——记账本(3)
开发日志(3)——适配器 昨天将bean类还有DatabaseHelper类写完.为了在MainActivity中调用,将数据保存到数据库中并显示出来.所以要先编写适配器CostListAdapter ...
- centos 7 pip install MySQL-python 报错
pip install MySQL-python 报错 pip install MySQL-python DEPRECATION: Python . Please upgrade your Pytho ...
- 字符串判空有空格报错:binary operator expected
使用-z或-n对一个变量判空时,需要注意若直接使用[ -n ${ARG} ]这种形式,若${ARG}中有空格将会报错, #!/bin/bash ARG="sd dd" if [ - ...
- E. Vus the Cossack and a Field (求一有规律矩形区域值) (有一结论待证)
E. Vus the Cossack and a Field (求一有规律矩形区域值) 题意:给出一个原01矩阵,它按照以下规则拓展:向右和下拓展一个相同大小的 0 1 分别和原矩阵对应位置相反的矩阵 ...
- 转载:Bass management
https://kenrockwell.com/audio/bass-management.htm https://www.axiomaudio.com/blog/bassmanagement htt ...
- jQuery对象和语法
jQuery类型 引入jquery.js时,其实是向全局作用域中,添加了一个新的类型--jQuery. 构造函数:负责创建jQuery类型的对象. 原型对象:保存jQuery对象可用的所有简化版API ...
- HTML学习(15)框架
通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面. <iframe src="//www.taobao.com" name="iframe_a" ...