腐女要過生日了,pty 想給腐女送禮物,但是腐女所在的教室離pty 的教室太遠了,於是pty就拜託會動歸和a星的djy幫忙送禮物。djy在學校建立了乙個平面直角座標系,他站在了(0,0)點,腐女在(x0,y0)點,djy每次只能往上下左右四個方向移動一步,中間有n棟矩形教學樓,每個教學樓給出兩個對角的座標,並且保證每棟教學樓的周圍區域(如圖所示)不會有別的教學樓,即djy可以繞乙個教學樓走不會碰到任何障礙,現在djy 想知道從起點到終點不碰到任何教學樓,最短需要多少步。
除了第一步會左走
其餘情況均不會左走。
用掃瞄線儲存當前x座標下到每點的最短路。
遇到矩形邊界時討論一下。
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=100000+10,mx=1000002,maxm=2000003;
int sx[maxm*4+100],gc[maxm*4+100];
bool bz[maxm*4+100],pd[maxm*4+100];
struct dong ask[maxn*2];
int i,j,k,l,r,t,n,m,tot,top,x,x
0,y0,x1,y1,x2,y2,ans;
intread()
while (ch>='0'&&ch<='9')
return
x*f;
}bool cmp(dong a,dong b)
void markad(int p,int v,int d)
void markcl(int p)
void down(int p,int l,int r)
if (sx[p]||gc[p])
}void change(int p,int l,int r,int a,int b,int v,int d)
down(p,l,r);
int mid=(l+r)/2;
if (b<=mid) change(p*2,l,mid,a,b,v,d);
else
if (a>mid) change(p*2+1,mid+1,r,a,b,v,d);
else
}void clear(int p,int l,int r,int a,int b,int v)
down(p,l,r);
int mid=(l+r)/2;
if (b<=mid) clear(p*2,l,mid,a,b,v);
else
if (a>mid) clear(p*2+1,mid+1,r,a,b,v);
else
}int query(int p,int l,int r,int a)
int main()
if (y1>y2) swap(y1,y2);
ask[++top].x=x1;
ask[top].ca=1;
ask[top].y
0=y1;ask[top].y1=y2;
ask[++top].x=x2+1;
ask[top].ca=2;
ask[top].y
0=y1;ask[top].y1=y2;
}sort(ask+1,ask+top+1,cmp);
x=0;
change(1,1,maxm,mx+1,maxm,1,1);
change(1,1,maxm,1,mx-1,mx-1,-1);
fo(i,1,top)
else
if (ask[i].ca==1)
else
if (ask[i].ca==2)}}
printf("%d\n",ans);
}
5049 腐女的生日
給定 n 個平面座標系上的矩形,保證矩形不會相交且每個矩形周圍至少乙個單位不會有矩形,求從 0 0 走到 x0,y0 且不經過矩形內部的點的最短曼哈頓距離。data constraint n 105,x 0 0 首先注意到,除了一種情況以外,其他情況都存在一種最優解不需要往右走,那麼 x 方向的代價...
老爸的生日
今天是老爸的生日,剛才打了30多分鐘的 以前很多時候是發簡訊的,打 問了他最近的情況,一切都好,好像特別精神,肯定有乙個原因,那就是女兒也考上大學了 談了下我的工作學習問題 最後談了他的工作,他說想要換個工作,那邊的工資高些,我知道那是榆林 陝西的北部 那是個環境比較惡劣的地方,風沙大 以前去過一次...
爸爸的生日
前天是老爸 60歲生日 一直也沒有給爸爸過過生日 決定從今年開始給爸爸過生日 於是昨天就從北京請假趕了回來 還算是比較順利,昨晚 23 20 就回到了家中 爸爸愛喝茶 專門買了一斤龍井 也算是盡盡孝心吧。早晨起來,媽媽就張羅買蛋糕,什麼時候出去吃飯的事情?本來說好中午去飯店給爸爸過生日,但媽媽又給兩...