題目大意
題目分析
所以,只需要記錄每個終點有車到達的最大的時間即可。
實現(c++)
#define _crt_secure_no_warnings#include#include#includeusing namespace std;
#define max_car_num 1005
/*此題採用模擬的方法來解決,對於每輛車都有乙個終點,題目也需要我們求出每輛車到達它
的終點的最短時間。但是在車行進的過程中,可能會由於其他車的阻擋而無法始終以最大速度行進,
這需要我們知道每輛車在什麼時間段可以最大速度行進,什麼時間段只能緊貼著前車行進。這樣來解決就
比較麻煩,可以轉換一下:
(1)由於車道為單向,因此後車不會對前面的車產生影響,而後車受到前面車的影響。因此將車按照起始位置進行
排序,然後按照從前向後的順序確定每輛車到達其終點的順序。
(2)因為考慮車a時,車a前面的車會對車a造成影響,而且影響會在前面的某車b到達車b的終點之後結束。因此,
所有車的終點,都應該被視為乙個重要因素,所以,儲存車a前面的所有車到達車a前面的那些所有終點的時間。
(3)再考慮一下,發現不需要儲存a前面所有車b1,b2...到達a前面所有終點fi, fi+1....的時間。我們先對a前面的終點排序,
從a出發到達那些終點肯定是按照從近到遠的順序到達。我們按照模擬的方法,從近到遠分階段考察a到達fi, fi+1,fi+2..的時間,
考慮a從fj到fj+1的時間,因為考慮a之前,已經獲得了a前面的那些車到達fj+1的時間,此時,我們需要知道的是a前面的那些車
到達fj的最大的時間m,若a以全速從fj到達fj+1的時間(記錄的是從a的起點到達fj+1的時間)大於m,則說明a的速度不夠,否則說明
a的前面的車阻擋a。兩種情況下,更新 m,以及a到達fj+1的時間。當a到達其終點a.end的時候,就記錄a到達的時間,該時間
就是a到達的最短時間。
所以,只需要記錄每個終點有車到達的最大的時間即可。
*/int gendpoint[max_car_num]; //儲存各個終點的位置
double gmaxendtime[max_car_num];
int gcarindex[max_car_num];
struct car;
car gcars[max_car_num];
//用於對車的索引按照車的起點位置排序,
bool compare1(int index1, int index2)
//根據車a的起點,找到車a需要經過的那些終點的起始序號(終點經過排序)
int getendindex(int start, int n)
return beg;
}int main()
memset(gmaxendtime, 0, sizeof(gmaxendtime));
//對車的索引排序 gcarindex[0]表示起點最小的車在gcar中的位置,gcarindex[1]表示起點第二小的車在gcar中的位置
sort(gcarindex, gcarindex + n, compare1);
//對終點進行排序
sort(gendpoint, gendpoint + n);
for (int i = 0; i < n; i++)
//從前向後考慮
for (int i = n - 1; i >= 0; i--)
else
if (gcars[gcarindex[i]].end_index == index)
point = gendpoint[index];
} }for (int i = 0; i < n; i++)
return 0;
}
微軟筆試題 彙總
1.臨界變數critical section的概念 還有semaphore,thread類似的這些 程序進入臨界區的排程原則是 如果有若干程序要求進入空閒的臨界區,一次僅允許乙個程序進入。任何時候,處於臨界區內的程序不可多於乙個。如已有程序進入自己的臨界區,則其它所有試圖進入臨界區的程序必須等待。進...
微軟筆試題 zz
題 有12個球 上面標有1 12的號碼 一台天平稱 沒有砝碼的哦 其中有乙個球的重量和其他的不一樣 不知道是輕了,還是重了哦 稱三次,找出那個重量不同的球來 只能那台沒砝碼的天平稱和12個球本身來操作 正確答案是 1 從12個中任取8個,4對4 的稱,如平衡,則從剩下的4個中再任取2個,1對1的稱,...
微軟筆試題 Constraint Checker
include include include include include include include define imin numeric limits min define imax numeric limits max define fr i,n for int i 0 i cons...