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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片

發布時間:2025/3/20 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

864 AlvinZH的兒時回憶----蛙聲一片

題目鏈接:https://buaacoding.cn/problem/865/index

思路

中等題。難點在于理解題意!仔細讀題才能弄懂題目規則。整個過程是通過模擬位置變化進行的。

第一個問題是AlvinZH的情緒變化,忽略某一位置的青蛙條件是:剛剛經歷失敗,即前一位置沒有抓到青蛙。

第二個問題是什么情況抓到青蛙:不灰心的情況遇到多只青蛙,除去跳的最遠的青蛙(可能多只),剩下的都被抓。

分析

像這種數據循環利用且不斷變化,但是有序的數據集,應該想到使用優先隊列。優先隊列可以保證所有青蛙按一定順序排列。

有些同學使用優先隊列數組,有點浪費空間。這里只需要一個優先隊列即可,具體可看代碼注釋。

考點:優先隊列。

難點:分析出各種情況,不能亂,邏輯要清晰。

參考代碼

// // Created by AlvinZH on 2017/9/29. // Copyright (c) AlvinZH. All rights reserved. //#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define MaxSize 100005using namespace std;struct Frog {int pos;//位置int dis;//跳程bool operator < (const Frog& f) const {if(pos != f.pos) return pos > f.pos;//小值優先return dis < f.dis;//大值優先} };int main() {int T, n;Frog nowF;scanf("%d", &T);while (T--){scanf("%d", &n);priority_queue<Frog> Q;for (int i = 0; i < n; i++) {scanf("%d %d", &nowF.pos, &nowF.dis);Q.push(nowF);}int numF = 0;bool Fail = false;//初始不灰心while (!Q.empty()){nowF = Q.top();//距離最近且跳的最遠的青蛙Q.pop();if(!Fail){Fail = true;Frog nextF = Q.top();while (!Q.empty() && nextF.pos == nowF.pos)//存在多只{Q.pop();if(nextF.dis == nowF.dis)//比翼雙飛{nextF.pos += nextF.dis;Q.push(nextF);}else//抓住它{numF++;Fail = false;}nextF = Q.top();}nowF.pos += nowF.dis;Q.push(nowF);}else//一起忽略,記得pop這些青蛙{Fail = false;Frog nextF = Q.top();while (!Q.empty() && nextF.pos == nowF.pos){Q.pop();nextF = Q.top();}}}printf("%d %d\n", nowF.pos, numF);} }

轉載于:https://www.cnblogs.com/AlvinZH/p/7698978.html

總結

以上是生活随笔為你收集整理的2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片的全部內容,希望文章能夠幫你解決所遇到的問題。

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