bzoj1615 麻煩的乾草打包機 BFS

2022-03-27 08:10:51 字數 1925 閱讀 9534

description

farmer john新買的乾草打包機的內部結構大概算世界上最混亂的了,它不象普通的機器一樣有明確的內部傳動裝置,而是,n (2 <= n <= 1050)個齒輪互相作用,每個齒輪都可能驅動著多個齒輪。 fj記錄了對於每個齒輪i,記錄了它的3個引數:x_i,y_i表示齒輪中心的位置座標(-5000 <= x_i <= 5000; -5000 <= y_i <= 5000);r_i表示該齒輪的半徑(3 <= r_i <= 800)。驅動齒輪的位置為0,0,並且fj也知道最終的工作齒輪位於x_t,y_t。 驅動齒輪順時針轉動,轉速為10,000轉/小時。你的任務是,確定傳動序列中所有齒輪的轉速。傳動序列的定義為,能量由驅動齒輪傳送到工作齒輪的過程中用到的所有齒輪的集合。對能量傳送無意義的齒輪都應當被忽略。在乙個半徑為rd,轉速為s轉/每小時的齒輪的帶動下,與它相接的半徑為rx的齒輪的轉速將為-s*rd/rx轉/小時。s前的負號的意思是,乙個齒輪帶動的另乙個齒輪的轉向會與它的轉向相反。 fj只對整個傳動序列中所有齒輪速度的絕對值之和感興趣,你的任務也就相應轉化成求這個值。機器中除了驅動齒輪以外的所有齒輪都被另外某個齒輪帶動,並且不會出現2個不同的齒輪帶動同乙個齒輪的情況。 相信你能輕易地寫個程式來完成這些計算:)

input

第1行: 3個用空格隔開的整數:n,x_t,y_t

第2..n+1行: 第i+1描述了齒輪i的位置及半徑:x_i,y_i,以及r_i

output

第1行: 輸出所有在傳動中起到作用的齒輪轉速的絕對值,包括驅動齒輪和 工作齒輪。只需要輸出答案的整數部分

sample input

4 32 54

0 0 10

0 30 20

32 54 20

-40 30 20

機器裡一共有4個齒輪,位於0,0的是半徑為10的驅動齒輪,它帶動了位於

0,30的,半徑為20的某個齒輪。這個齒輪又間接帶動了位於32,54,半徑為20的

工作齒輪,以及乙個位於-40,30,半徑同樣為20的冗餘的齒輪。

sample output

20000

輸出說明:

齒輪 位置  半徑     轉速

1 (0,0)     10     10,000

2 (0,30)    20     -5,000

3 (32,54)   20      5,000

------

齒輪轉速絕對值之和:20,000

簡單bfs題

#includeusing

namespace

std;

#define maxn 1105

struct

wheelc[maxn];

intf[maxn];

intn,first,last;

double

ans,v[maxn];

bool

vis[maxn];

inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}inline

int sqr(int

x)inline

int dis(int x,int

y)bool work(int x,int

y)void

bfs()}}

}int

main()

bfs();

for(int i=last;i;i=f[i])ans+=v[i];

printf(

"%d\n

",(int

)ans);

return0;

}

codevs 1615 資料備份

題目描述 description 你在一家it 公司為大型寫字樓或辦公樓 offices 的計算機資料做備份。然而資料備份的工作是枯燥乏味的,因此你想設計乙個系統讓不同的辦公樓彼此 之間互相備份,而你則坐在家中盡享計算機遊戲的樂趣。已知辦公樓都位於同一條街上。你決定給這些辦公樓配對 兩個一組 每 一...

Codevs1615資料備份

思路 方案一 o n k 的dp 只能得部分分。首先我們知道,只選擇相鄰的點構成線段,答案一定不會變差。因為若選擇跨點連線,我們必然可以用其中相鄰點構成的連線代替,且使得權值更小。那麼我們就只考慮相鄰點構成的線段如何選取。我們設dp i j 1 0 前i條線段選了j條線段是否選擇當前線段 包括在j內...

16 1 5 在 F 中宣告事件

16.1.5 在 f 中宣告事件 為了宣告乙個新事件,需要兩件東西。首先,必須建立乙個可以發布的事件值,以便其他斯可以訂閱新建立的事件。這一次,我們需要使用 f 特有的 ievent t 介面,而不是 net 的 iobservable t 我們還需要一種觸發該事件的方法。在 c 中,可以使用方法呼...