日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[题解] 2019牛客暑期多校第三场H题 Magic Line

發(fā)布時間:2025/6/17 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [题解] 2019牛客暑期多校第三场H题 Magic Line 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:https://ac.nowcoder.com/acm/contest/883/H

題意:二維平面上有n個不同的點,構造一條直線把平面分成兩個點數(shù)相同的部分。

題解:對這n個點以x為第一關鍵字,y為第二關鍵字從小到大排序。找到最中間兩個點。然后以這兩個點為界限,將平面劃分為左右兩個點數(shù)相同的區(qū)域。如圖所示。

由于題目中給出點的坐標絕對值≤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坐標偏移到最近的整數(shù)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; }

總結:賽場上由于忘記正負數(shù)使用int取整的結果不同,沒用floor函數(shù)取整,導致罰時++,今后務必避免。

轉載于:https://www.cnblogs.com/st1vdy/p/11245932.html

總結

以上是生活随笔為你收集整理的[题解] 2019牛客暑期多校第三场H题 Magic Line的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。