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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人

發布時間:2024/5/17 c/c++ 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019年第十屆藍橋杯 - 省賽 - C/C++研究生組 - G. 掃地機器人


Ideas

首先我們根據數學常識可以知道,當每個機器人清掃的范圍差不多時,最好都是 N / K,花的時間應該是最少的。

所以這道題實際上就是讓我們搜索每個機器人負責清掃的范圍,我們假設這個范圍是x。

既然是搜索,那么首先想到的就是二分,不斷的縮小x的過程中確保所有機器人的清掃范圍能夠覆蓋N個方格。

二分不是很麻煩,所以重點是確保所有機器人的清掃范圍能夠覆蓋N個方格。

給定一個x之后,我們可以遍歷每個機器人所在的位置依次判斷,因為題目中給出的機器人的位置并不是有序的,所以讀入數據之后還要先排序。

我們可以設置一個 total 變量,表示從左到右依次能夠清掃的范圍。

對于每一個機器人所在的位置k[i],如果k[i] - x,也就是機器人能夠清掃的左邊界小于total的話,分成兩種情況:

  • k[i] < total: 說明前面一個機器人k[i - 1]能夠清掃的右邊界達到k[i]的起始位置,那么第i個機器人就不用往左邊走了,此時前i個機器人能夠清掃的total = k[i] + x - 1;
  • k[i] >= total: 說明前面一個機器人k[i - 1]能夠清掃的右邊界沒有達到k[i]的起始位置,那么第i個機器人就需要往左邊清掃,而此時前i個機器人能夠清掃的total = total + x;
  • 如果 k[i] - x > total 的話,也就是第 i 個機器人能夠清掃的左邊界都大于前 i - 1 個機器人能夠清掃到的范圍,那說明這個 x 選的太小了,得增大范圍。

    最后找到了合適的 x 之后,那么花費時間最長的機器人,就是這個機器人的位置正好在 x 的中間,它需要先往左掃,再回來,然后往右掃,再回來,所以花費的最長時間為 (x - 1) * 2。

    然后我們就可以開始寫代碼啦。

    Code

    C++

    #include <iostream> #include <algorithm>using namespace std;const int maxn = 1e5+7; int n, m; int robot_list[maxn];bool check(int x) {int total = 0;for (int i = 0; i < m; i++) {if (robot_list[i] - x < total + 1) {if (robot_list[i] < total + 1) {total = robot_list[i] + x - 1;} else {total += x;}} else {return false;}}return total > n - 1; }int main() {cin >> n >> m;for (int i = 0; i < m; i++) {cin >> robot_list[i];}sort(robot_list, robot_list + m); int left = 0, right = n, middle, ans;while (left < right + 1) {middle = (right + left) >> 1;if (check(middle)) {right = middle - 1;ans = middle;} else {left = middle + 1;}}cout << (ans - 1) * 2 << endl;return 0; }

    Python

    def check(x):total = 0 # 前面的機器人能夠清掃的右邊界,初始化為0for i, v in enumerate(robot_list):if v - x < total + 1:if v < total + 1:total = v + x - 1else:total += xelse:return Falsereturn total > n - 1if __name__ == '__main__':# 1. 處理輸入數據n, k = map(int, input().split())robot_list = []for _ in range(k):robot_list.append(int(input()))robot_list.sort()# 2. 二分查找left, right, ans = 0, n, nwhile left < right + 1:middle = (right + left) >> 1if check(middle): # 如果此時確定的清掃范圍可以滿足條件則繼續縮小范圍ans = middleright = middle - 1else:left = middle + 1print((ans - 1) * 2)

    在線評測:https://www.acwing.com/problem/content/3179/

    總結

    以上是生活随笔為你收集整理的2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 天堂网av在线| 国产a级精品 | 国产美女毛片 | 亚州黄色 | 欧美一卡二卡三卡四卡 | 大地av | 黄色片成年人 | 亚洲成人一区二区在线观看 | 久久久久久久香蕉 | jizzjizz8| 涩涩成人| 精品国产乱码久久久久久预案 | 肉丝超薄少妇一区二区三区 | 日韩七区 | 日韩人妻无码精品久久久不卡 | www.av色| 欧美v亚洲 | 欧美极度另类 | www.尤物| 先锋av资源网站 | 国产免费一区二区三区在线播放 | 国产男女自拍 | 蜜乳av 懂色av 粉嫩av | 九九九在线 | 欧美猛交xxx | 成人在线视频观看 | 久久免费的精品国产v∧ | 婷婷五月小说 | 日韩高清一二三区 | 国产农村熟妇videos | 欧美中出 | 亚洲熟妇av一区二区三区漫画 | 日韩白浆 | 天天爽夜夜爽 | 亚洲综合网站 | 免费se99se| 欧美黄色三级 | 朝鲜女人性猛交 | 91麻豆精品久久久久蜜臀 | 成人免费黄色大片 | 国产一区二区三区乱码 | 91久久极品少妇xxxxⅹ软件 | 久久涩| 国产精品久久国产精品 | 国产资源在线视频 | 少妇人妻偷人精品视频蜜桃 | 色婷婷色综合 | 伊人资源网| 国产精品视频在线观看免费 | 欧美天堂在线视频 | 国产经典一区二区三区 | 亚洲综合在线一区 | 色男人影院 | 欧美日韩精品免费 | 一区二区三区免费观看视频 | 欧美老女人性生活 | 久久成年视频 | 日韩欧美成人一区二区三区 | 四虎在线视频免费观看 | 插插网站 | 日本xxxx免费| 火影黄动漫免费网站 | 香蕉国产精品 | 91蝌蚪91九色白浆 | 在线免费视频一区 | 日本毛片在线看 | 日韩欧美一区二区三区在线 | 五月婷婷操 | 操一操干一干 | av三级在线播放 | 成人手机在线播放 | 国产福利不卡 | 中文字幕日韩欧美在线 | 成人av片免费看 | 天天躁日日躁狠狠很躁 | 国产精品久久久久毛片大屁完整版 | 桃谷绘里香在线播放 | 国产精品传媒在线观看 | 黄色av高清 | 久久免费在线观看视频 | 婷婷亚洲视频 | 日日夜夜超碰 | 免费日韩视频 | 一区自拍 | 91久久在线观看 | 一级特黄免费视频 | 特级丰满少妇一级aaa爱毛片 | 亚洲欧美日韩精品久久亚洲区 | 国产丰满农村老妇女乱 | 无码人妻丰满熟妇区五十路百度 | 亚洲aaaaaa | 成年网站免费在线观看 | 色呦呦免费视频 | 边添小泬边狠狠躁视频 | 日韩一级av毛片 | av 日韩 人妻 黑人 综合 无码 | 久草精品视频 | 久久精品视频久久 | 国产色片在线观看 |