問題描述:
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程**為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的**均為t。
那麼car應如何安排到城市b的路線才能盡可能的節省花費呢?她發現這並不是乙個簡單的問題,於是她來向你請教。找出一條從城市a到b的旅遊路線,出發和到達城市中的機場可以任意選取,要求總的花費最少
輸入:
第一行為乙個正整數n(0≤n≤10),表示有n組測試資料。
第二行有四個正整數s,t,a,b。其中s表示城市的個數,t表示飛機單位里程的**,a,b分別為城市a,b的序號,(1<=a,b<=s)。
接下來有s行,其中第i行均有7個正整數xi1,yi1,xi2,yi2,xi3,yi3,ti,這當中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分別是第i個城市中任意三個機場的座標,t i為第i個城市高速鐵路單位里程的**。
輸出:
輸出最小費用(結果保留兩位小數)
題解:
首先,輸入只有三個點,所以我們要求第四個點,這裡我們可以用迭代法不停迴圈,直到x1->x2,x2->x3這兩條直線垂直。那麼第四個點的座標就是x1-x2+x3這裡畫個圖就知道了。
然後直接建邊,跑最短路,由於資料範圍不大直接floyd就好了。
#include
#include
#include
#include
#include
#define inf 10000000
#define get(x) (x-1)*4+1
using
namespace
std;
int n;
int s,st,ed,ap;
double t;
struct nodesa[105];//第i個城市機場的x,y
double f[4050][4050];//從第i個機場到第j個機場的最短距離
void getfour(int x)//求第四個點
sa[x].x[3]=tx[0]-tx[1]+tx[2];
sa[x].y[3]=ty[0]-ty[1]+ty[2];
}double dis(int x1,int y1,int x2,int y2)
int main()
ap=s*4;
for(int i=1;i<=ap;i++)
for(int j=1;j<=ap;j++)
for(int i=1;i<=s;i++)}}
//求不同城市的機場間的距離
for(int i=1;i<=s;i++)}}
}//floyd求最短路
for(int k=1;k<=ap;k++)
for(int i=1;i<=ap;i++)
for(int j=1;j<=ap;j++)
double ans=inf;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
printf("%.2lf\n",ans);}}
NOIP2001提高組 Car的旅行路線
noip2001提高組第四題。又到暑假了,住在城市 a 的 car 想和朋友一起去城市 b 旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為 ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程...
noip2001提高組題解
今天繼續感動滾粗。第一次提交170分,不能多說。第一題 一元三次方程 明明是寒假講分治的時候做過的題居然還是wa而且只拿了60分,說明知識掌握實在不夠牢固。寒假做的是保留4位小數,原題只保留2位,又因為答案在 100,100 所以直接列舉 10000到10000即可。然後鑑於寒假的時候寫的二分,我就...
NOIP2001 Car的旅行線路
題目描述 點選此處 解題思路 平行四邊形相對頂點的橫座標 縱座標之和分別相等。將所有機場的座標都算出來之後,再根據題目描述連邊,從出發地的四個機場或到達地的四個機場分別做單源點最短路。實現 include include include include include include using n...