籃球杯軟件賽國賽C/C++ 大學 B 組補題

3.gcd 模擬

在這里插入圖片描述

map<pair<int,int>,int>m;
void solve(){int n;cin>>n;forr(i,1,n){int ux,uy,vx,vy;cin>>ux>>uy>>vx>>vy;int dx=vx-ux,dy=vy-uy;if(dx!=0&&dy!=0){int g=abs(__gcd(dx,dy));dx/=g,dy/=g;//dxdy中除去公共部分(gcd) 就是相鄰整數點的橫縱距離int nx=ux,ny=uy;while (nx!=vx&&ny!=vy){m[{nx,ny}]++;nx+=dx,ny+=dy;}m[{vx,vy}]++;}else if(dx==0){//處理g=0的情況forr(i,min(uy,vy),max(uy,vy)){m[{ux,i}]++;}}else if(dy==0){forr(i,min(ux,vx),max(ux,vx)){m[{i,uy}]++;}}}int ans=0;for(auto i:m){if(i.second>1){ans++;}}cout<<ans<<endl;
}

4. 二分查找

簡單的二分查找板子,但是需要注意check函數的細節
在這里插入圖片描述

void solve(){int n,m;cin>>n>>m;vector<int>a(n+1);int mnd=1e8+10;forr(i,1,n){cin>>a[i];mnd=min(a[i],mnd);}auto check=[&](int x)->bool{int pre=0,cnt=0,fg=0;forr(i,1,n){int dis=a[i]-pre;if(dis>x){//注意中間添加檢查點的個數if(dis%x==0)cnt+=dis/x-1;else cnt+=dis/x;}pre=a[i];}return cnt<=m+1;//爆發技能就相當于多加一個檢查點};int l=1,r=1e8+10;while (l<r){int mid=(l+r)>>1;if(check(mid))r=mid;else l=mid+1;}cout<<r<<endl;
}

5.貪心

貪心,每次往前放最小的 新添加的要放在原字符串中更大的字母的前面

void solve(){int n,m;cin>>n>>m;string s,c;cin>>s>>c;sort(c.begin(),c.end());int i,j;string ans;for(i=0,j=0;i<n&&j<m;){if(s[i]<=c[j])ans+=s[i++];else ans+=c[j++];}while (i<n)ans+=s[i++];while (j<m)ans+=c[j++];cout<<ans<<endl;
}

6. dp

數據量不大 1e6 三維dp [數組元素][已經用了多少反轉區間][本元素是否反轉]
逆轉貢獻時間復雜度不大 1 e 9 ≈ 2 30 1e9≈2^{30} 1e9230

const int N=1e3+10;
int twos[35];
int rev(int x){int ans=0,pre=x;stack<bool>b;while (x){b.push(x&1);x>>=1;}int i=0;while (!b.empty()){ans+=b.top()*twos[i++];b.pop();}// cout<<ans<<' ';// cout<<ans-pre<<endl;return ans-pre;
}
int dp[N][N][2];
void solve(){twos[0]=1;forr(i,1,31)twos[i]=twos[i-1]*2;int n,m;cin>>n>>m;vector<int>a(n+1),b(n+1);int sum=0;forr(i,1,n){cin>>a[i];sum+=a[i];b[i]=rev(a[i]);//逆轉后的貢獻}forr(i,1,n){forr(j,1,m){dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);//不用反轉dp[i][j][1]=max(dp[i-1][j][1],dp[i-1][j-1][0])+b[i];//反轉  //如果上一個沒轉,本次新開反轉區間 //如果上一個反轉了,延續上個區間}}// cout<<sum<<endl;cout<<max(dp[n][m][0],dp[n][m][1])+sum<<endl;
}

7.貪心 滑動窗口

注意平面是第一象限[0,1e8]的正方形

貪心(縱):最優情況是以每個圓的下邊界為底往上+h
滑動窗口(橫):排序 滑動窗口找長度為w的區間 能包含的圓最多
在這里插入圖片描述

struct cir{int x,y,r;
};
//貪心思想(縱)+滑動窗口(橫)
void solve(){int n,w,h;cin>>n>>w>>h;vector<cir>a(n+1);vector<int>yl;forr(i,1,n){cin>>a[i].x>>a[i].y>>a[i].r;yl.push_back(a[i].y-a[i].r);//貪心 最優情況是以每個圓的下邊界為底}sort(a.begin()+1,a.end(),[](cir cx,cir cy){return cx.x+cx.r<cy.x+cy.r;});//從小到大 右端排序int ans=0;//在縱向區間內,枚舉橫邊,計數auto cnt=[&](int w,int h,int cury)->void{priority_queue<int,vector<int>,greater<int>>q;//小根堆 頂上是最左邊的邊forr(i,1,n){if(a[i].y-a[i].r>=cury&&a[i].y+a[i].r<=cury+h){//如果在縱坐標h的區間內q.push(a[i].x-a[i].r);while (!q.empty()&&a[i].x+a[i].r-q.top()>w)q.pop();//滑動窗口 優先隊列維護橫坐標ans=max(ans,(int)q.size());}}};forr(i,1,n){cnt(w,h,yl[i]);cnt(h,w,yl[i]);}cout<<ans<<endl;
}

8.遞推

借鑒(抄襲)了dalao的思路

  • 每個位置都有兩種跳法 2 i 2i 2i i + c i i+c_i i+ci?
  • 就像二叉樹的結構,從葉子往根遞推,記錄哪個位置當根set.size()最大
  • 問的是“可能經過的”,所以 2 i 2i 2i i + c i i+c_i i+ci?能跳則權值放入set
  • 數據很水,用set也能過,感覺是 n 2 n^2 n2的復雜度;dalao的題解中用bitset取或運算代替set.insert記錄權值,很快
const int N=4e4+5,M=130;
set<int>s[N];void solve(){int n;cin>>n;vector<int>a(n+1);forr(i,1,n)cin>>a[i];int ans=0;reforr(i,1,n){s[i].insert(a[i]);if(a[i]+i<=n){for(auto j:s[i+a[i]])s[i].insert(j);}if(2*i<=n){for(auto j:s[i*2])s[i].insert(j);}ans=max(ans,(int)s[i].size());}cout<<ans<<endl;
}

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

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

相關文章

技術棧RabbitMq的介紹和使用

目錄 1. 什么是消息隊列&#xff1f;2. 消息隊列的優點3. RabbitMQ 消息隊列概述4. RabbitMQ 安裝5. Exchange 四種類型5.1 direct 精準匹配5.2 fanout 廣播5.3 topic 正則匹配 6. RabbitMQ 隊列模式6.1 簡單隊列模式6.2 工作隊列模式6.3 發布/訂閱模式6.4 路由模式6.5 主題模式…

項目部署到Linux上時遇到的錯誤(Redis,MySQL,無法正確連接,地址占用問題)

Redis無法正確連接 在運行jar包時出現了這樣的錯誤 查詢得知問題核心在于Redis連接失敗&#xff0c;具體原因是客戶端發送了密碼認證請求&#xff0c;但Redis服務器未設置密碼 1.為Redis設置密碼&#xff08;匹配客戶端配置&#xff09; 步驟&#xff1a; 1&#xff09;.修…

Linux邊緣智能:物聯網的終極進化

Linux邊緣智能&#xff1a;物聯網的終極進化 從數據中心到萬物終端的智能革命 引言&#xff1a;邊緣計算的范式轉變 隨著物聯網設備的爆炸式增長&#xff0c;傳統的云計算架構已無法滿足實時性、隱私保護和帶寬效率的需求。邊緣智能應運而生&#xff0c;將計算能力從云端下沉到…

Linux Shell 中的 dash 符號 “-”

Shell中的-&#xff1a;小符號的大智慧 在Unix/Linux系統中&#xff0c;-符號是一個約定俗成的特殊標記&#xff0c;它表示命令應該使用標準輸入或標準輸出而非文件。這個看似簡單的短橫線&#xff0c;完美詮釋了Unix"一切皆文件"的設計哲學。 作為標準輸入/輸出的…

JMeter 實現 MQTT 協議壓力測試 !

想象一下&#xff0c;你的智能家居系統連接了上千個設備&#xff0c;傳感器數據通過 MQTT 協議飛速傳輸&#xff0c;但突然服務器崩潰&#xff0c;燈光、空調全失控&#xff01;如何確保你的 MQTT 經紀人能承受高負載&#xff1f;答案是 JMeter&#xff01;通過安裝 MQTT 插件&…

CKA考試知識點分享(6)---PriorityClass

CKA 版本&#xff1a;1.32 第六套題是涉及PriorityClass相關。 注意&#xff1a;本文不是題目&#xff0c;只是為了學習相關知識點做的實驗。僅供參考 實驗目的 創建一套PriorityClass &#xff0c;驗證PriorityClass的運作策略。 1 環境準備 創建2個pc&#xff0c;一個為高…

暴力破解篇補充-字典

在皮卡丘靶場的第二期&#xff0c;暴力破解模塊中&#xff0c;我相信大家短暫的接觸了字典這個概念&#xff0c;字典事實上就是包含了大量弱口令的txt文本文件 所以這篇文章用于分享一些字典&#xff1a;https://wwhc.lanzoue.com/ihdl12ybhbhi&#xff08;弱口令字典&#xff…

關于VS2022中C++導入第三方庫的方式

首先&#xff0c;新建一個Cpp項目(控制臺項目即可&#xff0c;其他項目也無所謂)&#xff0c;右鍵點擊項目名稱(Test1)選擇屬性或者在VS2022工具欄選擇調試標簽->屬性按鈕打開屬性頁。 注意點: 在開始其他操作前請注意先進行 配置和平臺選項框的選擇。配置選框選定了是配置…

C++中vector類型的介紹和使用

文章目錄 一、vector 類型的簡介1.1 基本介紹1.2 常見用法示例1.3 常見成員函數簡表 二、vector 數據的插入2.1 push_back() —— 在尾部插入一個元素2.2 emplace_back() —— 在尾部“就地”構造對象2.3 insert() —— 在任意位置插入一個或多個元素2.4 emplace() —— 在任意…

在Vue或React項目中使用Tailwind CSS實現暗黑模式切換:從系統適配到手動控制

在現代Web開發中&#xff0c;暗黑模式(Dark Mode)已成為提升用戶體驗的重要功能。本文將帶你使用Tailwind CSS在React項目(Vue項目類似)中實現兩種暗黑模式控制方式&#xff1a; 系統自動適配 - 根據用戶設備偏好自動切換手動切換 - 通過按鈕讓用戶自由選擇 一、項目準備 使…

Linux C語言網絡編程詳細入門教程:如何一步步實現TCP服務端與客戶端通信

文章目錄 Linux C語言網絡編程詳細入門教程&#xff1a;如何一步步實現TCP服務端與客戶端通信前言一、網絡通信基礎概念二、服務端與客戶端的完整流程圖解三、每一步的詳細講解和代碼示例1. 創建Socket&#xff08;服務端和客戶端都要&#xff09;2. 綁定本地地址和端口&#x…

Tomcat 安裝和配置

一、Tomcat官網 Apache Tomcat - Welcome! 選擇解壓到任意一個盤&#xff01;&#xff01; 二、Tomcat配置 1&#xff09;在系統變量處新建一個變量CATALINA_HOME。CATALINA_HOME環境變量的值&#xff0c;設置為Tomcat的解壓安裝目錄 2&#xff09;找到系統變量Path&#xff0…

動態規劃 熟悉30題 ---上

本來是要寫那個二維動態規劃嘛&#xff0c;但是我今天在問題時候&#xff0c;一個大佬就把他初一時候教練讓他練dp的30題發出來了&#xff08;初一&#xff0c;啊雖然知道計算機這一專業&#xff0c;很多人從小就學了&#xff0c;但是我每次看到一些大佬從小學還是會很羨慕吧或…

基于stm32F10x 系列微控制器的智能電子琴(附完整項目源碼、詳細接線及講解視頻)

注&#xff1a;成品使用演示、項目源碼、項目文檔在文章末尾網盤鏈接中自取 所用硬件&#xff1a;STM32F103C8T6、無源蜂鳴器、44矩陣鍵盤、flash存儲模塊、OLED顯示屏、RGB三色燈、面包板、杜邦線、usb轉ttl串口 stm32f103c8t6 面包板 …

時間同步技術在電力系統中的應用

隨著電力自動化技術的發展&#xff0c;時間同步不僅可以為電力系統的事后故障分析提供支持&#xff0c;而且已經參與到電力系統的實時控制中來&#xff0c;其可靠性對電力系統的穩定運行影響越來越大。在電力系統中&#xff0c;時間同步技術廣泛應用于調度控制中心、發電廠、變…

XMLGregorianCalendar跟Date、localDateTime以及String有什么區別

1. java.util.Date&#xff08;已過時&#xff0c;不推薦新代碼使用&#xff09; 特點 表示時間戳&#xff1a;存儲自 1970-01-01 00:00:00 UTC&#xff08;Unix 紀元&#xff09; 以來的毫秒數。 問題&#xff1a; 不區分日期和時間&#xff0c;也沒有時區支持&#xff08;依…

Python網頁自動化Selenium中文文檔

1. 安裝 1.1. 安裝 Selenium Python bindings 提供了一個簡單的API&#xff0c;讓你使用Selenium WebDriver來編寫功能/校驗測試。 通過Selenium Python的API&#xff0c;你可以非常直觀的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常簡潔方便的A…

玩轉抖音矩陣:核心玩法與高效運營規則

一、 抖音矩陣&#xff1a;流量協同的生態網絡 抖音矩陣&#xff0c;本質是運營一個相互關聯、互相支持的抖音賬號群。核心目標在于通過賬號間的深度協同&#xff08;內容、流量、粉絲&#xff09;&#xff0c;打破單個賬號的流量天花板&#xff0c;實現11>2的效果。它不僅…

C++11 constexpr和字面類型:從入門到精通

文章目錄 引言一、constexpr的基本概念與使用1.1 constexpr的定義與作用1.2 constexpr變量1.3 constexpr函數1.4 constexpr在類構造函數中的應用1.5 constexpr的優勢 二、字面類型的基本概念與使用2.1 字面類型的定義與作用2.2 字面類型的應用場景2.2.1 常量定義2.2.2 模板參數…

用電腦通過USB總線連接控制keysight示波器

通過USB總線控制示波器的優勢 在上篇文章我介紹了如何通過網線遠程連接keysight示波器&#xff0c;如果連接的距離不是很遠&#xff0c;也可以通過USB線將示波器與電腦連接起來&#xff0c;實現對示波器的控制和截圖。 在KEYSIGHT示波器DSOX1204A的后端&#xff0c;除了有網口…