復活之我會二分

文章目錄

      • 整數二分模板
          • 模板1:滿足條件的第一個數
          • 模板2:滿足條件的最后一個數
      • 浮點數二分模板
      • 一、Building an Aquarium
          • 思路分析
          • 具體代碼
      • 二、Tracking Segments
          • 思路分析
          • 具體代碼
      • 三、Wooden Toy Festival
          • 思路分析
          • 具體代碼
      • 四、路標設置
          • 思路分析
          • 具體代碼
      • 五、木材加工
          • 思路分析
          • 具體代碼

整數二分模板

模板1:滿足條件的第一個數
int bianrysearch(int l, int r) {while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else  l = mid + 1;} return l;
}
模板2:滿足條件的最后一個數
int bianrysearch(int l, int r) {while (l < r) {int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else  r = mid - 1;}return l;
}

浮點數二分模板

double bianrysearch(double l, double r) {double eps = 1e-6;   while (r - l > eps) {double mid = (l + r) / 2;if (check(mid)) r = mid;else l = mid;}return l;
}

一、Building an Aquarium

Building an Aquarium

思路分析

二分

具體代碼
#include <cstdio>
#include <iostream>using namespace std;
typedef long long ll;const int N = 2e5 + 10;
ll t, n, x;
ll a[N];bool check(ll mid) {ll sum = 0;for (int i = 1; i <= n; i++){if (a[i] < mid) sum += mid - a[i];}	return sum <= x;
}int main() {scanf("%lld", &t);while (t--) {scanf("%lld%lld", &n, &x);for (int i = 1; i <= n; i++) {scanf("%lld", &a[i]);}ll l = 1, r = 2e9 + 10;while (l < r) {ll mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}printf("%lld\n", l);}return 0;
}

二、Tracking Segments

Tracking Segments

思路分析

二分+前綴和

具體代碼
#include <cstdio>
#include <iostream>
#include <cstring>using namespace std;typedef long long ll;const int N = 1e5 + 10;int t, n, m, q;
int s[N], pos[N];
ll preSum[N];struct node{int x, y;
}a[N];bool check(int mid) {for (int i = 1; i <= n; i++) s[i] = 0;for (int i = 1; i <= mid; i++)	s[pos[i]] = 1;for (int i = 1; i <= n; i++) {preSum[i] = preSum[i - 1] + s[i];}for (int i = 1; i <= m; i++) {if (2 * (preSum[a[i].y ] - preSum[a[i].x - 1]) > a[i].y - a[i].x + 1)	return true;}return false;
}int main() {cin >> t;while(t--) {cin >> n >> m;for (int i = 1; i <= m; i++) {cin >> a[i].x >> a[i].y;}cin >> q;for (int i = 1; i <= q; i++) {cin >> pos[i];}if (!check(q)) {puts("-1");continue;}	int l = 1, r = q;while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << l << endl;}return 0;
}

三、Wooden Toy Festival

Wooden Toy Festival

思路分析

二分

具體代碼
#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;const int N = 2e5 + 10;int t, n;
int a[N];bool check(int mid) {int idx = 0, t1 = a[0] + 2 * mid;while (a[idx] <= t1 && idx < n) idx++;t1 = a[idx] + 2 * mid;while (a[idx] <= t1 && idx < n) idx++;t1 = a[idx] + 2 * mid;while (a[idx] <= t1 && idx < n) idx++;if (idx == n) return true;return false;
}int main() {cin >> t;while (t--) {cin >> n;int l = 0, r; for (int i = 0; i < n; i++) {cin >> a[i];}sort(a, a + n);r = a[n - 1];while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}		cout << l << endl;}return 0;
}

四、路標設置

路標設置

思路分析

二分,注意check函數寫法

具體代碼
#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;typedef long long ll;const int N = 100000 + 10;
ll len, n, k;
ll a[N];bool check(int mid) {ll dif = 0;for (int i = 1; i < n; i++) {dif += (a[i] - a[i - 1] - 1) / mid;}return dif <= k;
}int main() {cin >> len >> n >> k;ll l = 1, r = len;for(int i = 0; i < n; i++) {cin >> a[i];} sort(a, a + n);while (l < r) {ll mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << l << endl;return 0;
}

五、木材加工

木材加工

思路分析

二分

具體代碼
#include <cstdio>
#include <iostream>using namespace std;typedef long long ll;
const int N = 1e5 + 10;int n, k;
ll a[N];bool check(ll mid) {ll sum = 0;for (int i = 0; i < n; i++) sum += a[i] / mid;	return sum >= k;
}int main() {ll l = 0, r = 0;cin >> n >> k;for (int i = 0; i < n; i++) {scanf("%lld", &a[i]);r += a[i];} while(l < r) {ll mid = l + r + 1 >> 1;if (check(mid)) l = mid; else  r = mid - 1;}cout << l <<endl;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75856.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日c/c++題 備戰藍橋杯(握手問題)

試題 A: 握手問題 題解 題目描述 小藍組織了一場算法交流會議&#xff0c;共有50人參加。按照慣例&#xff0c;每個人都要與除自己外的其他所有人握手一次。但有7個人彼此之間沒有握手&#xff08;這7人與其他43人正常握手&#xff09;。求實際發生的握手總次數。 解題思路 …

mysql8.0.29 win64下載

mysql win64安裝包 mysql win64安裝包下載 mysql win64安裝包下載 通過網盤分享的文件&#xff1a;mysql 鏈接: https://pan.baidu.com/s/1sEOl-wSVtOG5gfIRdt5MXw?pwdgi7i 提取碼: gi7i

browser-use開源程序使 AI 代理可以訪問網站,自動完成特定的指定任務,告訴您的計算機該做什么,它就會完成它。

一、軟件介紹 文末提供程序和源碼下載 browser-use開源程序使 AI 代理可以訪問網站&#xff0c;自動完成特定的指定任務&#xff0c;瀏覽器使用是將AI代理與瀏覽器連接的最簡單方法。告訴您的計算機該做什么&#xff0c;它就會完成它。 二、快速開始 使用 pip &#xff08;Py…

CAD格式轉換器:Acme CAD Converter

Acme CAD Converter 是一款專業的多功能 CAD 文件管理工具&#xff0c;支持 ?DWG/DXF/DWF 文件查看、批量格式轉換及版本降級?&#xff0c;適用于工程設計、圖紙歸檔等場景?。軟件兼容 AutoCAD R2.5 至 2023 版本文件?&#xff0c;可輸出為 PDF、JPEG、TIFF、SVG 等 20 格式…

vmware虛擬機上Ubuntu或者其他系統無法聯網的解決方法

一、檢查虛擬機是否開啟了網絡服務 打開方式&#xff1a;控制面板->-管理工具--->服務 查找 VMware DHCP Service 和VMware NAT Service &#xff0c;確保這兩個服務已經啟動。如下圖&#xff0c;沒有啟動就點擊啟動。 二、設置網絡類型 我們一般使用前兩種多一些&…

數據結構與算法:基礎與進階

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 種一棵樹最好是十年前&#xff0c;其次是現在&#xff01; &#x1f680; 今天來學習C語言的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更…

使用分布式鎖和樂觀鎖解決超賣問題

在電商、秒殺等高并發場景中&#xff0c;“超賣”問題指庫存被過量扣減&#xff0c;導致實際庫存不足。以下是使用 分布式鎖 和 樂觀鎖 解決超賣問題的原理與實現方案&#xff1a; 一、超賣問題的核心原因 多個并發請求同時讀取庫存余量&#xff0c;并在本地計算后發起寫操作&…

盛水最多的容器

本題有兩種解法&#xff0c;一種是暴力解法&#xff0c;直接暴力枚舉出所有的體積比較出最大的即可&#xff0c;但是時間復雜度達到n方。超出了限制&#xff0c;另一種解法就是利用單調性解法&#xff0c;我們著重介紹一下單調性解法。 單調性解法&#xff1a; 體積vh*w&…

操作系統概述(3)

批處理系統 1.單道批處理系統 單道批處理系統是成批地處理作用&#xff0c;并且始終只有一道作業在內存中的系統。優點&#xff1a;提高系統資源的利用率和系統吞吐量。缺點&#xff1a;系統中的資源得不到充分利用。 2.多道批處理系統 引入多道程序設計技術&#xff0c;是…

數字身份DID協議:如何用Solidity編寫去中心化身份合約

本文提出基于以太坊的自主主權身份&#xff08;SSI&#xff09;實現方案&#xff0c;通過擴展ERC-734/ERC-735標準構建鏈上身份核心合約&#xff0c;支持可驗證聲明、多密鑰輪換、屬性隱私保護等特性。設計的三層架構體系將身份控制邏輯與數據存儲分離&#xff0c;在測試網環境…

【目標檢測】【深度學習】【Pytorch版本】YOLOV2模型算法詳解

【目標檢測】【深度學習】【Pytorch版本】YOLOV2模型算法詳解 文章目錄 【目標檢測】【深度學習】【Pytorch版本】YOLOV2模型算法詳解前言YOLOV2的模型結構YOLOV2模型的基本執行流程YOLOV2模型的網絡參數YOLOV2模型的訓練方式 YOLOV2的核心思想前向傳播階段反向傳播階段 總結 前…

第421場周賽:數組的最大因子得分、

Q1、數組的最大因子得分 1、題目描述 給你一個整數數組 nums。 因子得分 定義為數組所有元素的最小公倍數&#xff08;LCM&#xff09;與最大公約數&#xff08;GCD&#xff09;的 乘積。 在 最多 移除一個元素的情況下&#xff0c;返回 nums 的 最大因子得分。 注意&…

機器學習(神經網絡基礎篇)——個人理解篇5(梯度下降中遇到的問題)

在神經網絡訓練中&#xff0c;計算參數的梯度是關鍵步驟。numerical_gradient 方法旨在通過數值微分&#xff08;中心差分法&#xff09;計算損失函數對網絡參數的梯度。然而&#xff0c;該方法的實現存在一個關鍵問題&#xff0c;導致梯度計算錯誤。 1、錯誤代碼示例&#xf…

40常用控件_WindowFrame的影響

window frame 的影響 如果 widget 作為一個窗口(帶有標題欄,最小化,最大化,關閉按鈕),那么在計算尺寸和坐標的 時候就有兩種算法.包含 window frame 和 不包含 window frame. 其中x(),y0,frameGeometry(), pos(),move() 都是按照包含 window frame 的方式來計算 的. 其中 geome…

Nginx搭建API網關服務教程-系統架構優化 API統一管理

超實用&#xff01;用Nginx搭建API網關服務&#xff0c;讓你的系統架構更穩更強大&#xff01;&#x1f680; 親們&#xff0c;今天來給大家種草一個超級實用的API網關搭建方案啦&#xff01;&#x1f440; 在如今的Web系統架構中&#xff0c;一個穩定、高性能、可擴展的API網…

USB設備老是提示有問題,如何解決

問題描述&#xff1a;有一臺usb設備一旦不小心碰了下&#xff0c;后面就在右下角提示“無法識別的USB設備”“跟這臺計算機連接的前一個USB設備0工作不正常&#xff0c;WIndows無法識別它”。我這個是明確知道那個設備&#xff0c;如果不知道也可以同樣解決。 解決方法&#xf…

數據操作語言

一、DML的核心操作類型 1.添加數據(INSERT) (1)手動插入:逐行插入數據,適用于少量數據。 INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);(2)批量導入:通過外部文件導入數據,適用于大數據場景

【Python】案例:計算股票收益率和波動率

【Python】案例&#xff1a;計算股票收益率和波動率&#xff1a; 1、案例需求2、數據準備3、案例實現 1、案例需求 在分析股票數據時&#xff0c;我們需要從這些數據中得到一些關鍵指標進行評估&#xff0c;比如收益率、波動率&#xff0c;其中收益率又可以細分為簡單收益率和…

geoserver搭建Docker一鍵直接安裝并上傳tif影像預覽

geoserver搭建Docker一鍵直接安裝 文章目錄 geoserver搭建Docker一鍵直接安裝前言一、Docker拉取Geoserver二、運行后使用geoserver進行數據管理進入geoserver調整語言登錄geoserver上傳一個tif影像建立工作空間并上傳自己的tif數據建立圖層預覽 總結 前言 使用docker安裝geos…

STM32看門狗應用實戰:獨立看門狗與窗口看門狗深度解析(下) | 零基礎入門STM32第九十五步

主題內容教學目的/擴展視頻看門狗什么是看門狗&#xff0c;原理分析&#xff0c;啟動喂狗方法&#xff0c;讀標志位。熟悉在程序里用看門狗。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、看門狗應用架構分析1.1 系統監控流程圖1.2 雙看門狗應用場景對比 二、…