青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

題目意思是給出平面上n個不相鄰的點,要求到這n個點的曼哈頓距離之和最小的點的個數ans2,和這個最小距離ans1。
點的坐標范圍是-10000到10000(這個很重要)

考慮到曼哈頓距離的定義:|x - x0| + |y - y0|
這個定義是線性的,對稱的
因此考慮分別在兩個方向上解這個問題(曼哈頓距離的性質)

1。對于x方向,定義x曼哈頓距離是|x - x0|,因為坐標范圍很小,所以可以對所有可能的坐標,做一個線性掃描,求出fx,fx[x0]表示所有點到x0這個x坐標的x曼哈頓距離之和。對y方向相應地求出fy。
2。有了fx和fy,我們可以用O(1)時間算出所有點到某一坐標(x0, y0)的曼哈頓距離之和ans1。現在選出fx[x0] + fy[y0]的最小值(剔除那些輸入的點),這一步我是把fx和fy分別排序做的,復雜度O(nlogn)。應該能利用點的不相鄰性質做得更好。
3。現在統計滿足題意的點的個數。利用fx計算數組nx,nx[i].coor表示此點的x坐標,nx[i].num表示x坐標是nx[i].coor的點的個數,nx[i].dist表示所有點到nx[i].coor的x曼哈頓距離之和。相應地計算ny。計算數組dd,dd[i]表示所有點到第i個點的曼哈頓距離之和。令t1 = sum(nx[i].num * ny[i].num), if (nx[i].dist + ny[i].dist == ans1)。令t2 = (dd[i] == ans1) 的個數。因此ans2 = t1 - t2。

下面是我的代碼:

/*************************************************************************
Author: WHU_GCC
Created Time: 2008-1-19 20:26:13
File Name: pku3269.cpp
Description: 
***********************************************************************
*/

#include 
<iostream>
#include 
<set>
using namespace std;

#define out(x) (cout << #x << ": " << x << endl)
typedef 
long long int64;
const int maxint = 0x7FFFFFFF;
const int64 maxint64 = 0x7FFFFFFFFFFFFFFFLL;
template 
<class T> void show(T a, int n) for (int i = 0; i < n; ++i) cout << a[i] << ' '; cout << endl; }
template 
<class T> void show(T a, int r, int l) for (int i = 0; i < r; ++i) show(a[i], l); cout << endl; }

const int maxn = 10010;

struct node_t
{
    
int dist;
    
int coor;
}
;

struct num_t
{
    
int dist;
    
int num;
}
;

bool operator <(const node_t &a, const node_t &b)
{
    
return a.dist < b.dist;
}


int n;
int x[maxn];
int y[maxn];
node_t fx[maxn 
* 2];
node_t fy[maxn 
* 2];
int hx[maxn * 2];
int hy[maxn * 2];
int minx, miny, maxx, maxy;
int dd[maxn];

set <pair<intint> > ptrset;

num_t nx[maxn];
num_t ny[maxn];
int lnx, lny;

int main()
{
    scanf(
"%d"&n);
    memset(hx, 
0sizeof(hx));
    memset(hy, 
0sizeof(hy));
    
    minx 
= miny = maxint;
    maxx 
= maxy = 0;
    ptrset.clear();
    
for (int i = 0; i < n; i++)
    
{
        scanf(
"%d%d"&x[i], &y[i]);
        x[i] 
+= 10000;
        y[i] 
+= 10000;
        ptrset.insert(make_pair(x[i], y[i]));
        hx[x[i]]
++;
        hy[y[i]]
++;
        minx 
<?= x[i];
        miny 
<?= y[i];
        maxx 
>?= x[i];
        maxy 
>?= y[i];
    }

    fx[minx].dist 
= 0;
    fx[minx].coor 
= minx;
    
for (int i = minx + 1; i <= maxx; i++)
        fx[minx].dist 
+= abs(i - minx) * hx[i];
    
int numrx = n - hx[minx];
    
int nummx = hx[minx];
    
int numlx = 0;
    
for (int i = minx + 1; i <= maxx; i++)
    
{
        fx[i].dist 
= fx[i - 1].dist + numlx + nummx - numrx;
        fx[i].coor 
= i;
        numlx 
+= nummx;
        nummx 
= hx[i];
        numrx 
-= nummx;
    }

    fy[miny].dist 
= 0;
    fy[miny].coor 
= miny;
    
for (int i = miny + 1; i <= maxy; i++)
        fy[miny].dist 
+= abs(i - miny) * hy[i];
    
int numry = n - hy[miny];
    
int nummy = hy[miny];
    
int numly = 0;
    
for (int i = miny + 1; i <= maxy; i++)
    
{
        fy[i].dist 
= fy[i - 1].dist + numly + nummy - numry;
        fy[i].coor 
= i;
        numly 
+= nummy;
        nummy 
= hy[i];
        numry 
-= nummy;
    }

    
for (int i = 0; i < n; i++)
        dd[i] 
= fx[x[i]].dist + fy[y[i]].dist;

    sort(fx 
+ minx, fx + maxx + 1);
    sort(fy 
+ miny, fy + maxy + 1);
    
int ans1;
    
for (int i = minx; i <= maxx; i++)
        
for (int j = miny; j <= maxy; j++)
        
{
            
if (ptrset.count(make_pair(fx[i].coor, fy[j].coor)) == 0)
            
{
                ans1 
= fx[i].dist + fy[j].dist;
                
goto end;
            }

        }

    end:;
    lnx 
= 0;
    
for (int i = minx; i <= maxx; i++)
    
{
        
if (i == minx)
        
{
            nx[lnx].dist 
= fx[i].dist;
            nx[lnx].num 
= 1;
            lnx
++;
        }

        
else
        
{
            
if (fx[i].dist == nx[lnx - 1].dist)
                nx[lnx 
- 1].num++;
            
else
            
{
                nx[lnx].dist 
= fx[i].dist;
                nx[lnx].num 
= 1;
                lnx
++;
            }

        }

    }


    lny 
= 0;
    
for (int i = miny; i <= maxy; i++)
    
{
        
if (i == miny)
        
{
            ny[lny].dist 
= fy[i].dist;
            ny[lny].num 
= 1;
            lny
++;
        }

        
else
        
{
            
if (fy[i].dist == ny[lny - 1].dist)
                ny[lny 
- 1].num++;
            
else
            
{
                ny[lny].dist 
= fy[i].dist;
                ny[lny].num 
= 1;
                lny
++;
            }

        }

    }

    
int ans2 = 0;
    
for (int i = 0; i < lnx; i++)
        
if (nx[i].dist <= ans1)
        
{
            
for (int j = 0; j < lny; j++)
                
if (nx[i].dist + ny[j].dist <= ans1)
                
{
                    
if (nx[i].dist + ny[j].dist == ans1)
                        ans2 
+= nx[i].num * ny[j].num;
                }

                
else break;
        }

        
else break;
    
for (int i = 0; i < n; i++)
        
if (dd[i] == ans1)
            ans2
--;
    printf(
"%d %d\n", ans1, ans2);
    
return 0;
}

posted on 2008-01-20 11:22 Felicia 閱讀(1338) 評論(3)  編輯 收藏 引用 所屬分類: 雜題
Comments
  • # re: [雜題]pku3269 曼哈頓距離的性質
    richardxx
    Posted @ 2008-02-01 23:08
    做了做,那個不相鄰的條件的確是可以利用的。。
      回復  更多評論   
  • # re: [雜題]pku3269 曼哈頓距離的性質[未登錄]
    Felicia
    Posted @ 2008-02-03 15:55
    @richardxx
    怎么用?請賜教  回復  更多評論   
  • # re: [雜題]pku3269 曼哈頓距離的性質
    richardxx
    Posted @ 2008-02-03 21:21
    分別求出x和y取最優的區間[L,R],[B,U]和最優值optx,opty,num = (R-L+1)*(U-B+1)-區域中的點,值是optx+opty.

    因為沒有鄰點,所以num = 0 iif L=R && B=U,而此時可知(L,B)這點四周都是空的,而新的最優值就是它們中的某些了。。
      回復  更多評論   
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品激情在线观看| 午夜精品久久久久久久久| 久久先锋影音av| 欧美在线播放一区| 国产伦精品一区二区三区免费迷 | 久久精品国产清高在天天线| 亚洲自拍偷拍一区| 国产精品你懂的在线| 亚洲一区在线视频| 久久精品国产成人| 亚洲国产成人精品女人久久久| 久久久久久久成人| 日韩视频在线播放| 欧美在线亚洲| 亚洲乱码日产精品bd| 欧美日韩日本视频| 欧美一区二区视频97| 亚洲黄网站在线观看| 亚洲欧美国产精品专区久久| 夜夜嗨av色综合久久久综合网| 欧美一级二区| 91久久黄色| 国产精品日日摸夜夜添夜夜av| 欧美18av| 亚洲欧美在线视频观看| 91久久久一线二线三线品牌| 亚洲视频久久| 最新日韩av| 欧美一区二区免费观在线| 欧美高清在线视频观看不卡| 欧美一区二区三区免费视频| 久久综合给合久久狠狠狠97色69| 亚洲综合色婷婷| 亚洲激情视频网站| 亚洲婷婷综合久久一本伊一区| 亚洲欧洲另类| 久久爱www.| 欧美午夜精品理论片a级按摩| 欧美大片专区| 欧美激情中文不卡| 欧美v国产在线一区二区三区| 欧美日韩网址| 亚洲高清久久| 久久福利资源站| 一本久道久久综合狠狠爱| 欧美激情综合| 麻豆av一区二区三区| 香蕉久久国产| 亚洲精品日韩精品| 亚洲精品一区二区在线| 欧美一区二区三区免费在线看| 欧美性色综合| 一区二区三区国产精品| 亚洲精品乱码久久久久久| 亚洲欧洲偷拍精品| 免费成人av在线| 亚洲国产精品成人综合| 欧美一区二区视频免费观看| 国产精品日韩在线观看| 亚洲欧美中文日韩v在线观看| 亚洲人成在线观看| 一区二区三区久久| 欧美日韩国产限制| 国产日韩欧美制服另类| 国产女同一区二区| 精品51国产黑色丝袜高跟鞋| 激情国产一区二区| 久久国产毛片| 久久精品国产综合| 欧美美女视频| 国产美女精品| 久久www成人_看片免费不卡| 亚洲视频网站在线观看| 国产精品免费一区二区三区观看| 亚洲一区二区三区在线观看视频| 欧美在线免费观看| 欧美亚洲在线| 久久久久久一区二区三区| 在线成人免费视频| 亚洲日韩视频| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲国产另类久久精品| 欧美韩日一区二区| 夜夜爽av福利精品导航| 久久精品亚洲| 久久久不卡网国产精品一区| 亚洲二区在线观看| 亚洲精品自在久久| 国产精品老女人精品视频| 久久精品亚洲精品| 欧美激情亚洲激情| 欧美中文字幕第一页| 久久精品夜夜夜夜久久| 日韩一区二区精品葵司在线| 久久综合图片| 欧美国产在线观看| 亚洲欧美制服中文字幕| 久久久综合精品| 亚洲图片自拍偷拍| 欧美国产激情二区三区| 欧美在线综合视频| 国产精品久久久久久久久果冻传媒 | 久久久国产午夜精品| av不卡在线| 久久久av网站| 亚洲色在线视频| 久久精品一区二区国产| 在线视频免费在线观看一区二区| 亚洲女优在线| 一区二区三区欧美激情| 性伦欧美刺激片在线观看| 欧美日韩直播| 亚洲免费电影在线| 午夜精品一区二区三区在线视| 亚洲激情av| 欧美成人激情视频免费观看| 亚洲欧美中文日韩在线| 亚洲精品在线一区二区| 午夜精品一区二区三区电影天堂| 亚洲另类在线一区| 久久精品久久99精品久久| 亚洲欧美另类在线| 欧美日韩一区二区三区在线视频 | 欧美成人四级电影| 国际精品欧美精品| 每日更新成人在线视频| 国产精品久久久久久久第一福利| 亚洲国产欧美一区| 精品二区视频| 久久亚洲精品一区二区| 亚洲欧美区自拍先锋| 亚洲久久一区| 免费高清在线视频一区·| 最新日韩在线| 久久亚洲精品一区| 麻豆国产精品va在线观看不卡| 国产精品永久免费观看| 亚洲午夜在线视频| 亚洲欧美日韩另类精品一区二区三区| 欧美高清一区二区| 亚洲国产天堂久久综合网| 亚洲黄色大片| 欧美大胆人体视频| 亚洲欧洲日韩在线| av不卡在线看| 欧美日韩精品免费观看视频| 亚洲精品乱码久久久久久久久| 亚洲美女视频| 欧美三级在线视频| 中文无字幕一区二区三区| 亚洲欧美日韩另类| 国产午夜精品一区二区三区欧美| 中文日韩在线| 久久久久久网| 国产精品乱码| 亚洲欧美国产三级| 久久久www免费人成黑人精品| 免费亚洲一区| 91久久久久| 欧美一区二区免费视频| 国产三级欧美三级日产三级99| 欧美在线观看网站| 欧美成人伊人久久综合网| 亚洲精品国产日韩| 国产精品99一区二区| 午夜视频在线观看一区二区| 老司机久久99久久精品播放免费| 亚洲国产一区二区三区高清| 欧美日韩精品欧美日韩精品| 亚洲自拍都市欧美小说| 免费观看成人| 亚洲小说区图片区| 国内精品一区二区| 欧美日本国产精品| 久久riav二区三区| 亚洲精品综合久久中文字幕| 欧美在线三级| 亚洲精品激情| 国产亚洲午夜| 午夜亚洲一区| 亚洲激情在线播放| 久久激五月天综合精品| 日韩一级裸体免费视频| 韩国精品在线观看| 亚洲图色在线| 欧美国产精品专区| 亚洲欧美偷拍卡通变态| 在线日韩av| 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区国产| 欧美xxx在线观看| 亚洲欧美视频在线观看| 亚洲美女尤物影院| 很黄很黄激情成人| 国产精品亚洲综合久久| 欧美日韩国产综合一区二区| 久久久人成影片一区二区三区| 999亚洲国产精| 亚洲国产电影| 99国产精品99久久久久久粉嫩|