二分小專題

P1102 A-B 數對

P1102 A-B 數對
暴力枚舉還是很好做的,直接上雙層循環OK
二分思路:查找邊界情況,找出最大下標和最小下標,兩者相減+1即為答案所求
廢話不多說,上代碼

//暴力O(n^3) 72pts
// #include<bits/stdc++.h>
// using namespace std;
// const int N = 1100;
// int a[N],b[N],c[N];// int main()
// {
//     int n;cin>>n;
//     int cnt = 0;
//     for(int i = 1;i <= n;i++)cin>>a[i];
//     for(int i = 1;i <= n;i++)cin>>b[i];
//     for(int i = 1;i <= n;i++)cin>>c[i];
//     for(int i = 1;i <= n;i++)
//     {
//         for(int j = 1;j <= n;j++)
//         {
//             for(int z = 1;z <= n;z++)
//             {
//                 if(a[i] < b[j] && b[j] < c[z] ) cnt++;
//             }
//         }
//     }
//     cout<<cnt<<"\n";
//     return 0;
// }#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
using ll = long long;
ll a[N],b[N],c[N];
ll n;
int bs1(int x)
{ll l = -1,r = n+1;while(l+1 != r){ll mid = (l+r)>>1;if(a[mid] < x){l = mid;}else {r = mid;}}if(a[l] < x) return l;return 0;
}
int bs2(int x)
{ll l = -1,r = n+1;while(l+1 != r){ll mid = (l+r)>>1;if(c[mid] <= x){l = mid;}else {r = mid;}}if(c[r] > x) return n-r+1;return 0;
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;ll cnt = 0;for(int i = 1;i <= n;i++)cin>>a[i];for(int i = 1;i <= n;i++)cin>>b[i];for(int i = 1;i <= n;i++)cin>>c[i];//因為要二分a[i]和c[i],所以我們需要對其進行排序操作sort(a+1,a+1+n);sort(c+1,c+1+n);for(int i = 1;i <= n;i++){ll x = bs1(b[i]);ll y = bs2(b[i]);cnt += x * y;}cout<<cnt<<"\n";return 0;
}


P8667 [藍橋杯 2018 省 B] 遞增三元組

P8667 [藍橋杯 2018 省 B] 遞增三元組
一開始也是暴力做法,三層for循環拿到手
二分思想:觀察這個式子我們可以看出,b[i] 介于a[i] 和 c[i] 之間,可以選擇枚舉b[i],再套用二分查找模板查找a[i]中小于b[i]的部分,還有c[i]中大于b[i]的部分
注意:該l,r的取值分別是 -1 和 n+1,因為你的c[i]最終要返回 n-r+1,所以你需要把指針定在n+1上,確保搜索范圍的右邊界在數組外。這樣可以避免數組越界的問題
廢話不多說,上代碼

//暴力O(n^3) 72pts
// #include<bits/stdc++.h>
// using namespace std;
// const int N = 1100;
// int a[N],b[N],c[N];// int main()
// {
//     int n;cin>>n;
//     int cnt = 0;
//     for(int i = 1;i <= n;i++)cin>>a[i];
//     for(int i = 1;i <= n;i++)cin>>b[i];
//     for(int i = 1;i <= n;i++)cin>>c[i];
//     for(int i = 1;i <= n;i++)
//     {
//         for(int j = 1;j <= n;j++)
//         {
//             for(int z = 1;z <= n;z++)
//             {
//                 if(a[i] < b[j] && b[j] < c[z] ) cnt++;
//             }
//         }
//     }
//     cout<<cnt<<"\n";
//     return 0;
// }#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
using ll = long long;
ll a[N],b[N],c[N];
ll n;
int bs1(int x)
{ll l = -1,r = n+1;while(l+1 != r){ll mid = (l+r)>>1;if(a[mid] < x){l = mid;}else {r = mid;}}if(a[l] < x) return l;return 0;
}
int bs2(int x)
{ll l = -1,r = n+1;while(l+1 != r){ll mid = (l+r)>>1;if(c[mid] <= x){l = mid;}else {r = mid;}}if(c[r] > x) return n-r+1;return 0;
}
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;ll cnt = 0;for(int i = 1;i <= n;i++)cin>>a[i];for(int i = 1;i <= n;i++)cin>>b[i];for(int i = 1;i <= n;i++)cin>>c[i];//因為要二分a[i]和c[i],所以我們需要對其進行排序操作sort(a+1,a+1+n);sort(c+1,c+1+n);for(int i = 1;i <= n;i++){ll x = bs1(b[i]);ll y = bs2(b[i]);cnt += x * y;//每個 a[j] 可以與每個 c[z] 組合}cout<<cnt<<"\n";return 0;
}


P2440 木材加工

P2440 木材加工
很明顯這道題就是二分答案,跟二分查找略顯不同的是,它需要一個證明的過程判斷結果的正確性
廢話少說,上代碼

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5+10;
ll a[N];
ll n,k;
bool check(int mid,int k)//長度為mid,段數為k
{int cnt = 0;for(int i = 1;i <= n;i++){cnt += a[i] / mid;}if(cnt >= k)return true;else return false;
}
int main()
{cin>>n>>k;ll sum = 0;for(int i = 1;i <= n;i++)cin>>a[i];for(int i = 1;i <= n;i++){sum += a[i];}if(sum < k)cout<<0<<"\n";else //需要二分之前先對木材進行排序{sort(a+1,a+1+n);ll l = -1,r = 1e8+10;while(l+1 != r){ll mid = (l+r) >> 1;if(check(mid,k)){l = mid;}else r = mid;}cout<<l<<"\n";}return 0;
}

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

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

相關文章

java延遲map, 自定義延遲map, 過期清理map,map能力擴展。如何設置map數據過期,改造map適配數據過期

1. 功能&#xff1a; map 線程安全&#xff0c;能夠對存入的數據設置過期&#xff0c;或者自定義刪除 2. aliyun代碼看到的一個對象正好符合上述需求 出處是aliyun sdk core jar包的一個類。感興趣可以去下載下jar查看 下面是源碼&#xff1a; package com.aliyuncs.policy.…

國芯思辰|可編程線性霍爾傳感器AH820替換HAL825用于汽車渦輪增壓

渦輪增壓技術是提高發動機的進氣能力的技術&#xff0c;霍爾傳感器可以達到監測渦輪轉速的作用。在渦輪增壓器的軸上安裝一個永磁體&#xff0c;當渦輪旋轉時&#xff0c;永磁體也隨之轉動&#xff0c;產生周期性變化的磁場。霍爾傳感器靠近永磁體安裝&#xff0c;能夠檢測到磁…

(轉)正則化等最優化方法介紹

參考&#xff1a; http://blog.csdn.net/pipisorry/article/details/52108040 附帶 損失函數&#xff1b;經驗風險&#xff1b;正則化&#xff1b;結構風險 損失函數&#xff08;loss function&#xff09;是用來估量你模型的預測值f(x)與真實值Y的不一致程度&#xff0c;它是…

多維時序 | LightGBM多變量時序預測(Matlab完整源碼和數據,適合基礎小白研究)

多維時序 | LightGBM多變量時序預測&#xff08;Matlab完整源碼和數據&#xff0c;適合基礎小白研究&#xff09; 目錄 多維時序 | LightGBM多變量時序預測&#xff08;Matlab完整源碼和數據&#xff0c;適合基礎小白研究&#xff09;效果一覽基本介紹程序設計參考資料 效果一覽…

【解決】Android Gradle Sync 報錯 Could not read workspace metadata

異常信息 Caused by: java.io.UncheckedIOException:Could not read workspace metadata from C:\Users\xxx\.gradle\caches\transforms-4\69955912123c68eecd096b71c66ee211\metadata.bin 異常原因 看字面意思是不能讀取metadata文件&#xff0c;原因可能是因為緩存目錄異常…

Java面試實戰:電商場景下的Spring Cloud微服務架構與緩存技術剖析

第一輪提問 面試官: 謝飛機&#xff0c;我們先從基礎問題開始。請問你知道Spring Boot和Spring Cloud的區別嗎&#xff1f; 謝飛機: 當然知道&#xff01;Spring Boot主要用于快速構建獨立運行的Spring應用&#xff0c;而Spring Cloud則是在Spring Boot的基礎上實現分布式系統…

Express 路由使用、請求報文參數獲取、路由參數提取

Express 路由使用、請求報文參數獲取、路由參數提取 &#x1f6e3;? 一、Express 路由基本用法 const express require(express); const app express();// 基本 GET 路由 app.get(/, (req, res) > {res.send(Hello GET!); });// POST 路由 app.post(/submit, (req, res)…

【前端】手寫代碼輸出題易錯點匯總

兩天更新完。 const promise new Promise((resolve, reject) > {console.log(1);console.log(2); }); promise.then(() > {console.log(3); }); console.log(4); //1 //2 //4promise.then 是微任務&#xff0c;它會在所有的宏任務執行完之后才會執行&#xff0c;同時需…

基于深度學習和單目測距的前車防撞及車道偏離預警系統

隨著人工智能與計算機視覺技術的飛速發展,高級駕駛輔助系統(ADAS)已成為現代汽車智能化的關鍵標志。它不僅能有效提升行車安全,還能為自動駕駛時代的全面到來奠定堅實基礎。本文深入剖析一套功能完備、基于深度學習模型的 ADAS 系統的架構與核心實現,帶您領略智能駕駛背后…

JWT(JSON Web Token)用戶認證

1、頒發token <!--JWT依賴--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><dependency><groupId>javax.xml.bind</groupId>…

【質量管理】現代TRIZ(萃智)理論概述

一、什么是TRIZ理論 TRIZ理論,即發明問題解決理論(Teoriya Resheniya Izobreatatelskikh Zadatch),是由前蘇聯發明家根里奇阿奇舒勒(Genrich S. Altshuller)于1946年創立的。它是一門基于知識的、面向人的發明問題解決系統化方法學。TRIZ理論通過研究大量的專利,總結出技…

大模型學習筆記 day01 提示工程入門1.One-shot Few-shot提示學習法

如何應?和激發?語?模型的各??能? 提示?程 Prompt engineering 通過輸?更加合理的提示&#xff0c;引導模型進?更有效的結果輸出&#xff0c;本質上是?種引導和激發模型能?的?法更加輕量級的引導?法&#xff0c;嘗試和實施的?檻更低&#xff1b;問題是受限于模型…

FPGA初級項目10——基于SPI的DAC芯片進行數模轉換

FPGA初級項目10——基于SPI的DAC芯片進行數模轉換 DAC芯片介紹 DAC 芯片&#xff08;數字模擬轉換器&#xff09;是一種將數字信號轉換為連續模擬信號&#xff08;如電壓或電流&#xff09;的集成電路&#xff0c;廣泛應用于電子系統中&#xff0c;連接數字世界與模擬世界。 …

如何在 Windows上安裝 Python 3.6.5?

Windows 系統安裝步驟 下載安裝包 安裝包下載鏈接&#xff1a;https://pan.quark.cn/s/9294ca0fd46a 運行安裝程序 雙擊下載的 .exe 文件&#xff08;如 python-3.6.5.exe&#xff09;。 勾選 Add Python 3.6 to PATH&#xff08;重要&#xff01;這將自動配置環境變量&…

Cephalon端腦云:神經形態計算+邊緣AI·重定義云端算力

前引&#xff1a;當算力不再是“奢侈品” &#xff0c;在人工智能、3D渲染、科學計算等領域&#xff0c;算力一直是橫亙在個人與企業面前的“高墻”。高性能服務器價格動輒數十萬元&#xff0c;專業設備維護成本高&#xff0c;普通人大多是望而卻步。然而&#xff0c;Cephalon算…

【信息系統項目管理師】高分論文:論進度管理和成本管理(智慧城管平臺項目)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文1、規劃進度管理2、定義活動3、排列活動順序4、估算活動資源5、估算活動持續時間6、制定進度計劃7、控制進度論文 2018年8月,我作為項目經理參與了 XX市智慧城管平臺項目的建設,該項目投資500萬元人民幣…

WebAssembly:開啟高性能Web應用新時代

一、引言 隨著互聯網技術的飛速發展&#xff0c;Web應用的復雜度和性能要求越來越高。傳統的Web開發技術&#xff0c;如JavaScript&#xff0c;雖然功能強大&#xff0c;但在處理復雜計算和高性能需求時仍存在一些局限性。WebAssembly&#xff08;簡稱Wasm&#xff09;作為一種…

操作系統進程管理筆記

1. 進程的基本概念 1.1 進程的定義 進程就是運行中的程序。程序本身是沒有生命周期的&#xff0c;它只是存在磁盤上面的一些指令&#xff08;也可能是一些靜態數據&#xff09;。是操作系統讓這些字節運行起來&#xff0c;讓程序發揮作用。 1.2 CPU的時分共享 操作系統通過…

Python中random庫的應用

文章目錄 一、random 庫常用函數二、條件語句 隨機數示例1&#xff1a;隨機決定程序分支示例2&#xff1a;模擬概率事件 三、循環語句 隨機數示例1&#xff1a;循環直到滿足隨機條件示例2&#xff1a;隨機次數循環 四、隨機操作數據結構示例1&#xff1a;隨機打亂列表順序示例…

密碼學貨幣混幣器詳解及python實現

目錄 一、前言二、混幣器概述2.1 混幣器的工作原理2.2 關鍵特性三、數據生成與預處理四、系統架構與流程五、核心數學公式六、異步任務調度與 GPU 加速七、PyQt6 GUI 設計八、完整代碼實現九、自查測試與總結十、展望摘要 本博客聚焦 “密碼學貨幣混幣器實現”,以 Python + P…