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

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

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

1。對于x方向,定義x曼哈頓距離是|x - x0|,因為坐標范圍很小,所以可以對所有可能的坐標,做一個線性掃描,求出fx,fx[x0]表示所有點到x0這個x坐標的x曼哈頓距離之和。對y方向相應地求出fy。
2。有了fx和fy,我們可以用O(1)時間算出所有點到某一坐標(x0, y0)的曼哈頓距離之和ans1?,F(xiàn)在選出fx[x0] + fy[y0]的最小值(剔除那些輸入的點),這一步我是把fx和fy分別排序做的,復雜度O(nlogn)。應該能利用點的不相鄰性質(zhì)做得更好。
3?,F(xiàn)在統(tǒng)計滿足題意的點的個數(shù)。利用fx計算數(shù)組nx,nx[i].coor表示此點的x坐標,nx[i].num表示x坐標是nx[i].coor的點的個數(shù),nx[i].dist表示所有點到nx[i].coor的x曼哈頓距離之和。相應地計算ny。計算數(shù)組dd,dd[i]表示所有點到第i個點的曼哈頓距離之和。令t1 = sum(nx[i].num * ny[i].num), if (nx[i].dist + ny[i].dist == ans1)。令t2 = (dd[i] == ans1) 的個數(shù)。因此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 曼哈頓距離的性質(zhì)
    richardxx
    Posted @ 2008-02-01 23:08
    做了做,那個不相鄰的條件的確是可以利用的。。
      回復  更多評論   
  • # re: [雜題]pku3269 曼哈頓距離的性質(zhì)[未登錄]
    Felicia
    Posted @ 2008-02-03 15:55
    @richardxx
    怎么用?請賜教  回復  更多評論   
  • # re: [雜題]pku3269 曼哈頓距離的性質(zhì)
    richardxx
    Posted @ 2008-02-03 21:21
    分別求出x和y取最優(yōu)的區(qū)間[L,R],[B,U]和最優(yōu)值optx,opty,num = (R-L+1)*(U-B+1)-區(qū)域中的點,值是optx+opty.

    因為沒有鄰點,所以num = 0 iif L=R && B=U,而此時可知(L,B)這點四周都是空的,而新的最優(yōu)值就是它們中的某些了。。
      回復  更多評論   
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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一区| 午夜激情综合网| 久久亚洲精品一区二区| 亚洲黄色av一区| 亚洲一区二区三区免费视频| 欧美在线网站| 欧美高清视频一二三区| 国产精品综合视频| 亚洲激情av| 午夜在线a亚洲v天堂网2018| 久久久综合精品| 日韩视频在线一区二区| 久久国产主播| 欧美午夜精品理论片a级按摩| 国产一区二区三区四区| 亚洲乱码国产乱码精品精可以看| 樱桃成人精品视频在线播放| 国产精品一区免费视频| 伊人成人在线视频| 宅男精品视频| 免费亚洲一区| 亚洲一二三四久久| 欧美精品久久一区| 在线成人免费视频| 亚洲欧美日韩精品久久奇米色影视| 鲁大师成人一区二区三区| 一区二区三区视频在线| 欧美国产一区二区| 在线国产精品一区| 久久精品人人做人人综合| 99精品国产高清一区二区| 美女图片一区二区| 在线欧美影院| 久热精品视频在线观看一区| 亚洲欧美国产日韩中文字幕| 欧美日韩一区免费| 夜夜嗨av一区二区三区四区| 欧美成人中文字幕| 欧美在线亚洲| 国产精品一香蕉国产线看观看| 亚洲久色影视| 亚洲电影在线观看| 久久久久久久久久看片| 国产日韩欧美不卡在线| 欧美亚洲午夜视频在线观看| 一区二区免费在线视频| 欧美日韩精品系列| 在线亚洲自拍| 中文亚洲字幕| 国产精品swag| 香蕉久久夜色| 午夜精品久久久久久久久| 国产伦精品一区二区三区| 欧美亚洲一区二区三区| 亚洲欧美在线看| 国产一区二区三区四区hd| 久久久久女教师免费一区| 久久久国产精品一区二区中文| 激情婷婷亚洲| 亚洲成色777777女色窝| 欧美成人国产va精品日本一级| 亚洲精品影院| 一本一本久久a久久精品综合妖精| 欧美午夜精品久久久久免费视| 亚洲欧美日韩在线不卡| 欧美一区二区性| 亚洲国产精品精华液2区45| 亚洲高清久久久| 欧美日韩精品是欧美日韩精品| 亚洲在线中文字幕| 欧美在线视频在线播放完整版免费观看 | 久久久高清一区二区三区| 久久精品视频导航| 亚洲国产成人精品视频| 亚洲欧洲一级| 国产精品理论片在线观看| 久久精品一区蜜桃臀影院| 麻豆91精品91久久久的内涵| 一区二区福利| 久久国产精品色婷婷| 日韩亚洲视频在线| 亚洲永久免费精品| 亚洲国产欧美一区| 中文欧美字幕免费| 亚洲盗摄视频| 亚洲一区二区在线免费观看视频| 激情av一区| 亚洲视频碰碰| 91久久国产综合久久| 亚洲欧美综合v| 亚洲毛片av| 久久国产日韩欧美| 亚洲欧美中文日韩在线| 欧美xart系列在线观看| 久久精品在线播放| 国产精品a久久久久久| 欧美成年人视频网站| 国产精品视频999| 亚洲狠狠婷婷| 亚洲福利视频免费观看| 欧美一区成人| 先锋资源久久| 欧美日韩一区视频| 亚洲国内在线| 亚洲激情视频在线播放| 久久国产精品久久久| 午夜精品美女自拍福到在线| 欧美精品一区二区三区久久久竹菊| 久久久久综合网| 国产精品美女久久久久aⅴ国产馆| 欧美激情一级片一区二区| 国产一区二区三区的电影| 亚洲一区二区三区影院| 亚洲婷婷在线| 欧美日韩精品免费| 亚洲激情欧美激情| 亚洲人成在线观看| 欧美成人精品在线播放| 免费一级欧美片在线观看| 国产九九视频一区二区三区| 一本色道久久99精品综合 | 一区二区三区黄色| 欧美bbbxxxxx| 亚洲国产美女| 日韩视频中文| 欧美黄色免费| 亚洲精品中文字幕在线| 日韩亚洲欧美成人一区| 欧美另类视频| 99精品国产在热久久下载| 在线视频日本亚洲性| 欧美网站在线| 亚洲欧美日本在线| 欧美一区二视频| 国产私拍一区| 久久激情五月激情| 欧美成人精品影院| 欧美日韩国产一中文字不卡| 一区二区免费看| 欧美日韩视频一区二区| 亚洲精品乱码久久久久久黑人| 99在线精品观看| 欧美色欧美亚洲另类二区| 一区二区av在线| 性做久久久久久免费观看欧美| 国产日韩欧美视频在线| 久久国产一区二区三区| 欧美国产激情| 一本色道88久久加勒比精品| 欧美日韩中文字幕精品| 亚洲欧美久久久| 久久裸体视频| av72成人在线| 国产伦精品一区二区三区视频孕妇| 午夜精品在线看| 欧美激情精品久久久久久久变态 | 99热免费精品| 国产精品欧美经典| 久久久久青草大香线综合精品| 亚洲福利视频免费观看| 亚洲综合社区| 一区二区三区自拍| 欧美日韩第一区日日骚| 亚洲欧美一区在线| 91久久综合| 久久久精品日韩| 夜夜狂射影院欧美极品| 国产曰批免费观看久久久| 欧美精品久久久久久久久久| 午夜精品一区二区三区四区 | 亚欧美中日韩视频| 亚洲精品网址在线观看| 久久久九九九九| 夜夜嗨av一区二区三区| 国产综合亚洲精品一区二| 欧美日韩精品免费看| 久久香蕉精品| 午夜欧美视频| 亚洲最新在线| 亚洲经典三级| 欧美3dxxxxhd| 久久久欧美一区二区| 亚洲综合色自拍一区| 99国产一区| 亚洲国产综合91精品麻豆| 国产综合欧美在线看| 国产欧美 在线欧美| 国产精品xvideos88| 欧美日韩国产在线播放| 欧美精品一区二|