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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[TJOI2013]松鼠聚会

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [TJOI2013]松鼠聚会 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
草原上住著一群小松鼠,每個小松鼠都有一個家。時間長了,大家覺得應該聚一聚。但是草原非常大,松鼠們都很頭疼應該在誰家聚會才最合理。

每個小松鼠的家可以用一個點x,y表示,兩個點的距離定義為點(x,y)和它周圍的8個點(x-1,y)(x+1,y),(x,y-1),(x,y+1).(x-1,y+1),(x-1,y-1),(x+1,y+1),(x+1,y-1)距離為1。

輸入格式
第一行是一個整數N,表示有多少只松鼠。接下來N行,第i行是兩個整數x和y,表示松鼠i的家的坐標

輸出格式
一個整數,表示松鼠為了聚會走的路程和最小是多少。

輸入輸出樣例
輸入 #1復制

6
-4 -1
-1 -2
2 -4
0 2
0 3
5 -2
輸出 #1復制
20
輸入 #2復制
6
0 0
2 0
-5 -2
2 -2
-1 2
4 0
輸出 #2復制
15
說明/提示
樣例解釋
在第一個樣例中,松鼠在第二只松鼠家(-1,-2)聚會;在第二個樣例中,松鼠在第一只松鼠家(0.0)聚會。

數據范圍
30%的數據,0 ≤ N ≤ 1000

100%的數據,0 ≤ N ≤ 100000; ?10^9 ≤ x, y ≤ 10^9


空間距離變換題目,實際沒什么難度。

我們由切比雪夫距離和曼哈頓距離的變換可知:

將一個點(x,y)的坐標變為(x+y,x?y)后,原坐標系中的曼哈頓距離 = 新坐標系中的切比雪夫距離
將一個點(x,y)的坐標變為(x+y2,x?y2) 后,原坐標系中的切比雪夫距離 = 新坐標系中的曼哈頓距離


然后題目給出了切比雪夫距離,我們變為曼哈頓距離,然后曼哈頓距離,x和y的計算是可以分開的,然后我們計算前綴和,就可以分別算出貢獻值了。


AC代碼:

#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e5+10; int n,res=1e18,x[N],y[N],sx[N],sy[N]; struct node{int x,y;}t[N]; signed main(){cin>>n;for(int i=1;i<=n;i++){scanf("%lld %lld",&x[i],&y[i]); t[i].x=x[i]+y[i]; t[i].y=x[i]-y[i];x[i]=t[i].x; y[i]=t[i].y;}sort(x+1,x+1+n); sort(y+1,y+1+n);for(int i=1;i<=n;i++) sx[i]=x[i]+sx[i-1];for(int i=1;i<=n;i++) sy[i]=y[i]+sy[i-1];for(int i=1;i<=n;i++){int l=lower_bound(x+1,x+1+n,t[i].x)-x;int r=lower_bound(y+1,y+1+n,t[i].y)-y;int s=l*t[i].x-sx[l]+(sx[n]-sx[l]-(n-l)*t[i].x);s+=r*t[i].y-sy[r]+(sy[n]-sy[r]-(n-r)*t[i].y);res=min(res,s);}cout<<(res>>1ll)<<endl;return 0; }

總結

以上是生活随笔為你收集整理的[TJOI2013]松鼠聚会的全部內容,希望文章能夠幫你解決所遇到的問題。

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