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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU4666 Hyperspace(数学推理+数据结构)

發布時間:2024/4/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU4666 Hyperspace(数学推理+数据结构) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????????????????????

問題領悟

1)求兩點的曼哈頓距離

2)求n個點中最大的曼哈頓距離(樸素算法:O(n^2)?)??[在不考慮刪除操作的情況下]

3)加入刪除操作,如果前面已求得的最大距離若有一個被刪去,則需要重新計算最大曼哈頓距離,最壞情況時間復雜度可達O(n^3)?;遠遠超出。

問題思考

1)首先能不能找到問題的一種樸素算法,使復雜度為O(n^2)的,在10s時間下可以試試;

2)期待這類O(n^2)問題的更高效的算法!

???A.思考方向1:可能要用數據結構優化到Onlg(n));

3)不存在,那就考慮問題本身具有的特殊性,或挖掘出問題本身的性質和規律:

???曼哈頓距離:|x1-x2|?+?|y1-y2|

???求最大值。

???怎么考察此式的性質?

???

???將式拆分,重組,得:

???

???我們可以發現一個規律點:即不同點相對應的維數必然符號相反,如同一個式中,xi必然對應著-yi,由此將后面式子負號提出,用01二進制每個點內部各維數間的正負號,得到對應兩個相同符號的式子相減的表達式,如對于二維(xi,xj,(yi,yj)?,用二維數組?A[N][2^k]?保存N*(2^k)個數據可分解如下:

|xi-yi|?+?|xj-yj|=

max{

???A[1][0]-A[2][0]

???A[1][1]-A[2][1]

???A[1][2]-A[2][2]

???A[1][3]-A[2][3]

}

所以對于2^k中每一個數(即表示單個點內個位數間的運算符號),運算后保存在方便查找最值且下標為K的數據結構中(如堆,優先隊列,multiset集合等),遍歷2^k種情況,最大最小值,相減找出最大差值即可:

?

源程序

#include <iostream> #include <cstdio> #include <cstring> #include <set> using namespace std; #define maxn 60005 #define Max(a,b) (a)>(b)?(a):(b) #define Min(a,b) (a)<(b)?(a):(b)multiset<int> mset[1<<5]; int arr[maxn][6];int main() { int q,k,i,j,l,op,ith,sum,ma;while(~scanf("%d%d",&q,&k)){for(i=0;i<(1<<k);i++)mset[i].clear(); //注意容器的初始化清空! for(i=1;i<=q;i++){scanf("%d",&op);if(!op){for(j=0;j<k;j++)scanf("%d",&arr[i][j]);for(j=0;j<(1<<k);j++){sum=0;for(l=0;l<k;l++){if(j&(1<<l))sum+=arr[i][l];elsesum-=arr[i][l];}mset[j].insert(sum); }}else{scanf("%d",&ith);for(j=0;j<(1<<k);j++){sum=0;for(l=0;l<k;l++){if(j&(1<<l))sum+=arr[ith][l];elsesum-=arr[ith][l];}multiset<int>::iterator it;it=mset[j].find(sum);mset[j].erase(it); }}ma=0;multiset<int>::iterator it1,it2;for(j=0;j<(1<<k);j++){it1=mset[j].begin();it2=mset[j].end();it2--; ma=Max(ma,*it2-*it1);}printf("%d\n",ma);}}return 0; }


?

???

???

轉載于:https://www.cnblogs.com/litaotao/p/3592453.html

總結

以上是生活随笔為你收集整理的HDU4666 Hyperspace(数学推理+数据结构)的全部內容,希望文章能夠幫你解決所遇到的問題。

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