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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

牛客寒假5-D.炫酷路途

發布時間:2025/3/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客寒假5-D.炫酷路途 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/contest/331/D

題意:

小希現在要從寢室趕到機房,路途可以按距離分為N段,第i個和i+1個是直接相連的,只需要一秒鐘就可以相互到達。

炫酷的是,從第i個到第i+2pi+2p個也是直接相連的(其中p為任意非負整數),只需要一秒鐘就可以相互到達。

更炫酷的是,有K個傳送法陣使得某些u,v之間也是直接相連的,只需要一秒鐘就可以相互到達,當然,由于設備故障,可能會有一些u=v的情況發生。

現在小希為了趕路,她需要在最短的時間里從寢室(編號為1)到達機房(編號為N),她不希望到達這N個部分以外的地方(不能到達位置N+1),也不能走到比自己當前位置編號小的地方(比如從5走到3是非法的)。

她想知道最短的時間是多少。

思路:

bfs,先進對傳送點,在進入i+2^p的最大點,或者,某個點存在傳送門也進隊。

感覺是個假算法。

代碼:

#include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXK = 20;struct Node {int _w;int _step;Node(int w,int step):_w(w), _step(step){} }; pair<int, int> C[MAXK];int Quick_M(int t) {int x = 2;int res = 1;while (t > 0){if (t&1)res *= x;x *= x;t >>= 1;}return res; }int main() {int n,k;cin >> n >> k;for (int i = 1;i <= k;i++)cin >> C[i].first >> C[i].second;queue<Node> que;que.emplace(1,0);while (!que.empty()){//cout << 1 << endl;Node now = que.front();if (now._w == n)break;for (int i = 1;i <= k;i++){if (C[i].first == now._w){if (C[i].second <= now._w)continue;que.emplace(C[i].second, now._step + 1);}}for (int i = 0;i <= 30;i++){LL tx = now._w + Quick_M(i);if (tx > n){que.emplace(now._w + Quick_M(i - 1), now._step + 1);break;}else{for (int i = 1;i <= k;i++){if (C[i].first == tx){if (C[i].second <= tx)continue;que.emplace(tx, now._step + 1);}}}}que.pop();}cout << que.front()._step << endl;return 0; }

  

轉載于:https://www.cnblogs.com/YDDDD/p/10353798.html

總結

以上是生活随笔為你收集整理的牛客寒假5-D.炫酷路途的全部內容,希望文章能夠幫你解決所遇到的問題。

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