problem 2235 國王的出遊
黑暗之王有一片棋盤般的疆土,這片疆土有2*10^9行,有2*10^9列。假設這塊疆土的行從上到下編號1到2*10^9,它的列從左到右也編號1到2*10^9。我們可以把第i行第j列的方格記為座標(i,j)。
但是這偌大棋盤只有被給的n個線狀區域才是允許通行的。每個線狀區域被三個引數描述,ri,ai,bi(ai<= bi)。ri代表給定線狀區域的行編號,ai代表線狀區域的起始列編號,bi代表末尾編號。
現在國王想要從乙個給定座標方格(x0,y0)通過最小移動步數到達終點座標方格(x1,y1),而且只能通過上述給出的允許通行的線狀區域。
國王移動一步只能發生在相鄰的方格之間。此外,如果兩個方格至少共享乙個點我們便認為他們相鄰。
有多組資料(<=30),處理到檔案尾(eof)。
每組資料第一行包含四個整數,x0, y0, x1, y1(1 <= x0, y0, x1, y1 <= 2*10^9),分別代表國王的初始座標和終點座標。
第二行有乙個整數n (1 <= n <= 10^5),代表有n條可通行的線狀區域。
接下裡會有n行,第i行包含三個整數,ri,ai, bi (1 <= ri, ai bi <= 2*10^9),含義看題面。
資料允許線狀區域會有交叉或者巢狀。
資料保證國王的起點方格和終點方格都是可通行的,並且兩個區域不相同。另外保證所有線狀區域的的長度總和不超過10^5。
1 <= x0, y0, x1, y1, ri, ai, bi<= 2*10^9,1 <= n <= 10^5
如果沒有一條道路使得國王從起始區域到達終點區域,則輸出 -1。
否則,則輸出國王的從起始區域到達終點區域的最小步數。
5 7 6 11 3
5 3 8
6 7 11
5 2 5
1 1 2 10 2
1 1 3
2 6 10 4
-1福州大學第十三屆程式設計競賽
就是考驗**能力的一道題。
然而直接map+排序,分成行和列去離散化的話,fzu沒有開o2加速,map會一直tle...............................
所以我們不妨換個思路。
我們用pair存入所有點,因為點的個數不超過1e5.所以我們對線段所覆蓋的點去重並存入即可。
然後我們直接將每個點拿出,看看其周圍8個位子是否能走,如果有能走的地方,直接建一條邊就行。
然後跑一下bfs就行了。
ac**:
/*
*/#include#include#include#includeusing namespace std;
struct node
e[105000*8];
int cont;
int head[105000];
int dist[105000];
int fx[8]=;
int fy[8]=;
pairp[105000];
int cnt;
int sx,sy,ex,ey;
void add(int from,int to)
void spfa()}}
if(dist[tt]==0x3f3f3f3f)printf("-1\n");
else printf("%d\n",dist[tt]);
}int main()}}
spfa();}}
cogs2235 烤雞翅 貪心
題意 每天雞翅數量都會增加,每天也會有人買一定數量雞翅,求最多賣給幾個人。奧妙重重 對每天的雞翅數量分類討論,如果夠賣就賣上,不夠賣就分析前些日子賣得最多的乙個如果不賣是否夠,夠就退了那個,再賣這個。為什麼呢?證明如下 如果夠賣,可以發現剩下的數量更多,答案至少不會更壞 如果不夠賣,就需要退掉至少兩...
FZU 單詞問題
給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字元 不包含空格 句子長度不超過 10...
fzu 單詞問題
description 給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。input 輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字...