題目描述很長 遙控賽車

2022-03-21 07:13:09 字數 2281 閱讀 8058

【描述】

最近,全國的遙控賽車好手們都會聚一堂,參加一年一度的csom遙控賽車大賽。csom遙控賽車大賽有著相當悠久的歷史,雖然在每一年的比賽中,競賽組委會都會根據實際的需要設立新的比賽規則,有些選手可能會難以適應,但也正是由於這種不斷創新的精神,使得更多的人參與了進來,比賽也因此獲得了空前的成功。前幾年的csom競賽,都是選用一塊大小為n×m的場地作為賽場,要求選手的賽車在最短的時間內從起點移動到終點。雖然賽場的地形高低有少許的起伏,但並不存在無法到達的地點,因而在這種賽制下,只要選手賽車的馬力足夠大,就可以佔據極大的優勢。隨著這幾年的比賽的進行,賽車的效能雖然產生了很大的提高,但由於受到技術水平的限制,提高的幅度已日見縮小。為了使比賽的內容更加新穎,難度更具挑戰性,csom競賽組委會研究出了一種新的競賽規則,其中最大的改變就是在賽場上增加了許多無法穿越的障礙物,若賽車在到達終點前撞上障礙物,就視為任務失敗。在賽車的馬力和靈活性等效能相差較小的情況下,要控制速度極快的賽車繞開障礙物移動到終點,最關鍵的是提高選手的反應靈敏度(即兩次改變賽車運動方向所間隔的最短時間,也可稱為選手的反應時間),使自己能夠更快地控制賽車改變前進的方向。當然,由於選手反應靈敏度的不同,可選擇的路徑就會大不相同。如下圖所示,對於同乙個賽場,兩位選手的反應時間分別為2秒和1秒,而其到達終點所需的時間分別為18秒和16秒(賽車每秒可沿當前方向移動一格,從起點出發時算改變一次方向)。

(就是樣例輸入)

由以上兩圖可知,賽車的最短路線長度是由選手的反應靈敏度所決定的,當選手的反應很慢時,可能就不會存在可行的路徑。你的任務便是:在能夠完成賽程(即存在從起點到終點的路徑)的條件下,求出選手所有可能的反應時間,以及每個可能的反應時間所對應的最短路線的長度。

【輸入格式】

輸入檔案的第一行包含兩個整數n和m,表示賽場的長和寬。第二行有四個整數x1、y1、x2、y2,表示賽程的起點和終點的位置分別為(x1,y1)和(x2,y2)。接下來n行是乙個n×m的01矩陣,矩陣中第i行第j列元素aij=1表示賽場中位置(i,j)為賽道,aij=0表示賽場中位置(i,j)有障礙物。

【輸出格式】

輸出檔案可能有多行,其中每行輸出乙個可能的選手反應時間及該時間所對應的最短路線長度。輸出檔案中必須包含所有符合題目要求的選手反應時間。

【樣例輸入】

10 10

1 4 10 7

0 0 0 1 0 0 0 0 0 0

0 0 0 1 1 1 0 0 0 0

0 0 0 1 0 1 0 0 0 0

1 1 1 1 0 1 1 1 1 0

1 0 0 0 0 0 0 0 1 0

1 0 1 1 1 0 1 1 1 0

1 1 1 0 1 1 1 0 1 0

0 0 1 0 0 0 0 0 1 0

0 0 1 1 1 1 1 1 1 0

0 0 0 0 0 0 1 0 0 0

【樣例輸出】

1 16

2 18

【分析】

顯然的最短路。每個可以到的的地方就是乙個點。注意邊長的確定。我的構圖方法是首先連出所有的邊,然後在spfa的過程中限制邊的長度(>=t)。第一次寫的時候,沒列舉一次t構一次圖,限制邊長》t, 超時。一想乙個點才最多4n條邊,於是更改了構圖的方法。還有乙個點spfa的佇列開短了……於是又乘了乙個maxn。恩,很不錯的題目。

#include #include #define maxn 110

#define maxint 1000000000

bool _map[maxn][maxn];

struct ss

bl[maxn][maxn][5*maxn];

int num[maxn][maxn];

int dis[maxn][maxn];

bool v[maxn][maxn];

int l,r,t,n,m;

int sx,sy,ex,ey,ans;

int temp;

struct sss

q[maxn*maxn*maxn];

bool inmap(int x,int y)

void findl(int x,int y)

tx=x;

ty=y+1;

while ((inmap(tx,ty))&&(_map[tx][ty]))

tx=x+1;

ty=y;

while ((inmap(tx,ty))&&(_map[tx][ty]))

tx=x;

ty=y-1;

while ((inmap(tx,ty))&&(_map[tx][ty]))

}void solve()

return 0;

}

題目描述極為混亂 作業排程方案

題目描述 我們現在要利用m臺機器加工n個工件,每個工件都有m道工序,每道工序都在不同的指定的機器上完成。每個工件的每道工序都有指定的加工時間。每個工件的每個工序稱為乙個操作,我們用記號j k表示乙個操作,其中j為1到n中的某個數字,為工件號 k為1到m中的某個數字,為工序號,例如2 4表示第2個工件...

手打一遍 2012騰訊馬拉松 賽車 題目

最終結果是ra 因為沒考慮給出條件重疊的情況.下面是題目和 ps 車速初始為0.輸入 第一行為乙個數cases,用來描述有多少組資料。對於每組測試資料,首先為乙個數 n 0 n 50 表示 有 n個速度限制的三元組 s,t,d 其中0 s 100,0 t t,0 d 1000 接下來為兩個正整數t ...

Python 合併兩個有序鍊錶 題目描述

1.合併兩個有序鍊錶 題目描述 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 class listnode def init self,x self.val x self.next non...