日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gym 102798AGolden Spirit

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gym 102798AGolden Spirit 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VJ鏈接

題意:

河的兩岸各有n個人,中間有個橋,過橋時間為t,所有人過橋后要休息x時間,你每次可以帶一個人過橋(每次最多只能帶一個人),問將所有人帶到對岸并帶回來,最短需要多少時間?

題解:

這題非常繞,如果沒有捋順關系就會懵逼
最佳策略是帶一個人到對岸后,這個人要休息,那我們就帶另一個人到對岸,相當于每次盡量帶還沒過橋的人,當所有人第一輪帶完后,開始往回帶,此時我們所在一側為起始位置,而我們這一側最早開始休息的人是第二次帶的人,對岸最早休息的人是第一次被帶的人,此時我們就考慮是過橋去對岸借第一個人,還是在本岸等第二個人休息好再帶過去。
這就有個比較,
我們設
t1=x-2ll*(n-1)t//表示第二次被帶過岸的人還需要多久能休息好(即本岸最早休息的人)
t2=x-(2lln-1)t//表示第一次被帶過岸的人還需要多久能休息好(即對岸最早休息的人)
t是題目所給,為過橋時間
x為休息時間
如果x<=(2lln-2)*t,說明當第一輪帶完之后,所有人都休息好了,此時無須等待直接再來一輪,總時間為4nt,即2n個人的過橋時間
如果t1>=max(t2,t),說明到,去對岸接第一次過橋的人更劃算
否則在原地等待第二次過橋的人更優
給個樣例自己模擬模擬:

1 1 10 2

ans=16

代碼:

#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() {int t;cin>>t;while(t--){ll n,x,t;cin>>n>>x>>t;ll t1=x-2ll*(n-1)*t;ll t2=x-(2ll*n-1)*t;if(x<=(2ll*n-2)*t)cout<<4ll*n*t<<endl;else if(t1>=max(t2,t)){cout<<4ll*n*t+max(t2,t)<<endl;}else cout<<t1+4ll*n*t<<endl; // else if(x>=(2ll*n-1)*t+t)cout<<4ll*n*t+(x-(2ll*n-1)*t-t)<<endl; // else cout<<x-(2ll*n-2)*t+4ll*n*t<<endl;}return 0; } /* 1 2 2:|21 4:2|1*/

總結

以上是生活随笔為你收集整理的Gym 102798AGolden Spirit的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。