NOIP2001提高組 Car的旅行路線

2021-08-28 15:26:26 字數 1609 閱讀 8812

noip2001提高組第四題。

又到暑假了,住在城市 a 的 car 想和朋友一起去城市 b 旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程**為 ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的**均為 t。

圖例:

那麼 car 應如何安排到城市 b 的路線才能盡可能的節省花費呢?請你程式設計幫她找出一條從城市 a 到 b 的旅遊路線,出發和到達城市中的機場可以任意選取,要求總的花費最少,小數點後保留 2 位。

第一行為乙個正整數 n(0<=n<=10),表示有 n 組測試資料。

每組的第一行有四個正整數 s,t,a,b。其中 s(0輸出共有 n 行,每行乙個資料對應相應測試資料的輸出結果,即總的最小花費。

輸入

1

3 10 1 3

1 1 1 3 3 1 30

2 5 7 4 5 2 1

8 6 8 8 11 6 3

輸出

47.55
解析:

最短路。

最短路很明顯,只需要細心一點就行了,唯一需要說一下的就是對於輸入的每個城市的三個機場,如何求出第四個機場的座標?

因為保證是矩形,所以只需要通過向量法求出兩個直角邊,就可以確定矩形了。

**:

#include #include #include #include #include #include #include using namespace std;

const int maxn=405;

const int maxm=220000;

int q,n,size,s,t;

int first[maxn],vis[maxn];

double ans=1e9,m,dis[maxn],t[maxn],x[maxn],y[maxn];

struct shu;

shu edge[maxm<<1];

inline int get_int()

inline void clean()

inline void cal(int id,double x1,double y1,double x2,double y2,double x3,double y3)

inline void q(int id)

inline double calc(int i,int j)

inline void build(int x,int y,double z)

inline void pre()

for(int j=1;j<=n;j++)

} }}

inline double mn(double x,double y)

} }}

inline void solve()

}int main()

pre();

solve();

printf("%.2lf\n",ans);

} return 0;

}

noip2001提高組題解

今天繼續感動滾粗。第一次提交170分,不能多說。第一題 一元三次方程 明明是寒假講分治的時候做過的題居然還是wa而且只拿了60分,說明知識掌握實在不夠牢固。寒假做的是保留4位小數,原題只保留2位,又因為答案在 100,100 所以直接列舉 10000到10000即可。然後鑑於寒假的時候寫的二分,我就...

統計單詞個數(NOIP 2001提高組)

題目描述 description 給出乙個長度不超過200的由小寫英文本母組成的字母串 約定 該字串以每行20個字母的方式輸入,且保證每行一定為20個 要求將此字母串分成k份 1 單詞在給出的乙個不超過6個單詞的字典中。要求輸出最大的個數。輸入描述 input description 第一行為乙個正...

NOIP2001提高組複賽B 數的劃分

略方法為減而治之,把n劃分成k份的答案就相當於每次把n分成a,b兩個數,再把a分成k 1份,然後把每次a分成k 1份的答案相加即可。注意點是每輪分出來的b要不大於上一輪分出來的b。1 include 2 using namespace std 34 define rep i,n for int i ...