【coci2011/2012 3】距離之和
題目:
mirko創造了乙個新的機械人並且決定去測試一下。我們可以想象測試的跑道是乙個二維的空間。初始的時候,機械人在(0,0)的位置,在收到了一系列命令之後,機械人就會移動,這些命令是s,j,i,z,每個命令代表了不同的移動方向。
具體一下,如果機械人原來在(x,y)的位置,在收到了s的命令之後,會向(x,y+1)移動,收到j之後,會向(x,y-1)移動,收到i命令之後會向(x+1,y)移動,收到z命令之後會向(x-1,y)移動。
在這個二維空間上有n個固定的控制點,在每個命令執行之後,每個固定點就會計算自己與機械人的曼哈頓距離,然後把這些距離的總和返回給mirko。
說明:兩個點(x1,y1)和(x2,y2)的曼哈頓是|x1-x2|+|y1-y2|。
輸入:第一行是正整數n(1<=n<=100000)和m(1<=m<=300000),n表示控制點的個數,m表示命令的數量。
接下來n行,每行兩個整數(絕對值不大於1000000),表示控制點的座標,有些控制點可能是相同的。接下來一行,乙個長度為m的字串(包含以上四種命令),表示機械人依次收到的命令。
輸出:
輸出m行,每行乙個整數,對於第i行,輸出的是第i個命令執行以後所有控制點與機械人的曼哈頓距離之和。
乍一看,暴力肯定會超時
可以坑50%資料點
不過正解也很明顯
我們一開始就把當前的曼哈頓之和先算出來
記錄行和列上的控制點的個數
把它弄乙個字首和
之後用x和y記錄當前機械人的座標
我們每次得到乙個操作,便根據情況從ans裡減掉一些,加上一些就可以了
『s』:
+ lq[y];//lq為列的字首和,hq為行的字首和,l為每列的操作點的個數,h為每行操作點的個數
- (n-lq[y]);//n為點的總數
'j':
+ n-lq[y]+l[y]
- (lq[y]-l[y])
'i':
+ hq[x]
- (n-hq[x])
'z':
+ n-hq[x]+h[x]
- (hq[x]-h[x])
標程:(請勿抄襲,後果很嚴重)
var hq,lq,h,l:array[-1000001..1000001]of longint;
ch:char;
x,y,n,m,i,j,k,s,nx,ny:longint;
ans:int64;
begin
assign(input,'robot.in');
assign(output,'robot.out');
reset(input);
rewrite(output);
readln(n,m);
for i:=1
to n do
begin
readln(x,y);
inc(h[x]);
inc(l[y]);
ans:=ans+abs(x-0)+abs(y-0);
end;
for i:=-1000000
to1000000
dobegin
lq[i]:=lq[i-1]+l[i];
hq[i]:=hq[i-1]+h[i];
end;
nx:=0;
ny:=0;
for i:=1
to m do
begin
read(ch);
case ch of
's':
begin
ans:=ans+lq[ny];
ans:=ans-(n-lq[ny]);
inc(ny);
end;
'j':
begin
ans:=ans-(lq[ny]-l[ny]);
ans:=ans+(n-(lq[ny]-l[ny]));
dec(ny);
end;
'i':
begin
ans:=ans+hq[nx];
ans:=ans-(n-hq[nx]);
inc(nx);
end;
'z':
begin
ans:=ans-(hq[nx]-h[nx]);
ans:=ans+(n-(hq[nx]-h[nx]));
dec(nx);
end;
end;
writeln(ans);
end;
close(input);
close(output);
end.
距離度量之馬氏距離
用來度量乙個樣本點 與資料分布為 的集合的距離。假設樣本點為 資料集分布的均值為 協方差矩陣為 則這個樣本點 與資料集合的馬氏距離為 馬氏距離也可以衡量兩個來自同一分布的樣本x和y的相似性 當樣本集合的協方差矩陣是單位矩陣時,即樣本的各個維度上的方差均為 馬氏距離就等於歐式距離相等。當協方差矩陣是對...
距離度量之馬氏距離
用來度量乙個樣本點 與資料分布為 的集合的距離。假設樣本點為 資料集分布的均值為 協方差矩陣為 則這個樣本點 與資料集合的馬氏距離為 馬氏距離也可以衡量兩個來自同一分布的樣本x和y的相似性 當樣本集合的協方差矩陣是單位矩陣時,即樣本的各個維度上的方差均為 馬氏距離就等於歐式距離相等。當協方差矩陣是對...
數學基礎之曼哈頓距離,歐式距離,余弦距離
曼哈頓距離,歐式距離,余弦距離 1.曼哈頓距離 曼哈頓距離又稱馬氏距離 manhattan distance 還見到過更加形象的,叫計程車距離的。具見上圖黃線,應該就能明白。計算距離最簡單的方法是曼哈頓距離。假設,先考慮二維情況,只有兩個樂隊 x 和 y,使用者a的評價為 x1,y1 使用者b的評價...