CF1486B Eastern Exhibition
生活随笔
收集整理的這篇文章主要介紹了
CF1486B Eastern Exhibition
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CF1486B Eastern Exhibition
題意:
二維平面上有 n 個點,要找一個點,使得所有點到它的曼哈頓距離( x 和 y 的坐標差距之和)之和最小。請問有幾個滿足該要求的點?
題解:
我們先考慮一維的情況,在一個數軸上,存在n個點,現在要找一個為位置pos,使得pos到其他點的距離和最小?
很顯然,如果n為奇數,我們就選最中間的點為pos,如果n為偶數,那就是最中間兩個數的中位數
現在問題變成二維的了,現在要找點(x,y)到其他點的距離和最小,x和y我們是可以分開考慮的,因為x只與橫坐標有關,y只與縱坐標有關,那問題就變成兩個一維的情況,然后兩個所圍成的面積,里面的點都是滿足要求的
代碼:
#include <bits/stdc++.h> #include <unordered_map> #define debug(a, b) printf("%s = %d\n", a, b); using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> PII; clock_t startTime, endTime; //Fe~Jozky const ll INF_ll= 1e18; const int INF_int= 0x3f3f3f3f; void read(){}; template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar) {x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...); } template <typename T> inline void write(T x) {if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0'); } void rd_test() { #ifdef ONLINE_JUDGE #elsestartTime = clock ();freopen("data.in", "r", stdin); #endif } void Time_test() { #ifdef ONLINE_JUDGE #elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC); #endif } const int maxn=1e3+9; ll x[maxn],y[maxn]; int main() {//rd_test();int t;read(t);while(t--){int n;cin>>n;for(int i=1;i<=n;i++){cin>>x[i]>>y[i];}if(n&1==1){printf("1\n");continue;}sort(x+1,x+1+n);sort(y+1,y+1+n);ll ans1=x[n/2+1]-x[n/2]+1;ll ans2=y[n/2+1]-y[n/2]+1;cout<<ans1*ans2<<endl;}return 0; //Time_test(); }總結
以上是生活随笔為你收集整理的CF1486B Eastern Exhibition的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019 ICPC Asia-East
- 下一篇: 爱发呆是什么原因?