教主的花園

2021-08-15 11:41:50 字數 1732 閱讀 2575

lhx教主最近總困擾於前來膜拜他的人太多了,所以他給他的花園加上了一道屏障。

可以把教主的花園附近區域抽像成乙個正方形網格組成的網路,每個網格都對應了乙個座標(均為整數,有可能為負),若兩個網格(x1, y1),(x2, y2)有|x1 – x2| + |y1 – y2| = 1,則說這兩個網格是相鄰的,否則不是相鄰的。

教主在y = 0處整條直線上的網格設定了一道屏障,即所有座標為(x, 0)的網格。當然,他還要解決他自己與內部人員的進出問題,這樣教主設定了n個入口a1, a2, …, an可供進出,即對於y = 0上的所有網格,只有 (a1, 0),(a2, 0), ……, (an, 0) 可以通過,之外的所有縱座標為0的網格均不能通過,而對於(x, y)有y不為0的網格可以認為是隨意通過的。

現在教主想知道,給定m個點對(x1, y1),(x2, y2),並且這些點均不在屏障上,詢問從乙個點走到另乙個點最短距離是多少,每次只能從乙個格仔走到相鄰的格仔。

輸入的第1行為乙個正整數n,為屏障上入口的個數。

第2行有n個整數,a1, a2, …, an,之間用空格隔開,為這n個入口的橫座標。

第3行為乙個正整數m,表示了m個詢問。

接下來m行,每行4個整數x1, y1, x2, y2,有y1與y2均不等於0,表示了乙個詢問從(x1, y1)到(x2, y2)的最短路。

輸出共包含m行,第i行對於第i個詢問輸出從(x1, y1)到(x2, y2)的最短路距離是多少。

2 2 -1

2 0 1 0 -1

1 1 2 24 2

【資料規模】

對於20%的資料,有n,m≤10,ai,xi,yi絕對值不超過100;

對於40%的資料,有n,m≤100,ai,xi,yi絕對值不超過1000;

對於60%的資料,有n,m≤1000,ai,xi,yi絕對值不超過100000;

對於100%的資料,有n,m≤100000,ai,xi,yi絕對值不超過100000000。

還是比較水的。。。但是我初評wa了

兩種情況:

1. 兩個點分布在屏障同一側,則直接輸出dist。

2. 兩個點分布在異側,我們就二分出口,若mid往某個方向移動,使得dist

#include

#include

#include

#include

using

namespace

std;

int a[111111],x1,x2,y1,y2,door,n,m,ans;

int cmp(int x,int y)

int dist(int p1,int q1,int p2,int q2)

void fin(int l,int r,int ql,int qr)

int mid=(l+r)>>1;

if(ql<=a[mid] && qr>=a[mid])else

ans=dist(x1,y1,a[mid],0)+dist(a[mid],0,x2,y2);

if(mid1],0)+dist(a[mid+1],0,x2,y2)1,r,ql,qr);else

if(mid>1 && dist(x1,y1,a[mid-1],0)+dist(a[mid-1],0,x2,y2)1,ql,qr);else

}int main()

if(x1==x2 && y1==y2)

if(y1<=0 && y2>=0)

else

}}

教主的花園

教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡33種樹,這3種樹的高度分別為10,20,3010,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩...

JZOJ 1406 教主的花園

教主有著乙個環形的花園,他想在花園周圍均勻地種上n棵樹,但是教主花園的土壤很特別,每個位置適合種的樹都不一樣,一些樹可能會因為不適合這個位置的土壤而損失觀賞價值。教主最喜歡3種樹,這3種樹的高度分別為10,20,30。教主希望這一圈樹種得有層次感,所以任何乙個位置的樹要比它相鄰的兩棵樹的高度都高或者...

P1133教主的花園

本題是一道多維dp題目,那麼在不開啟演算法標籤的情況下怎麼去想呢,首先是題目的求的是最值,比較好想到的就是動態規劃。首先是本題的種植範圍限在一維,但是有種類要求,可以把高度10,20,30簡單理解為種類1,2,3 因為沒有其他奇奇怪怪的東西 我們需要一維記錄位置,二維記錄種類,而教主大人又有特殊審美...