版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025年acm考試試題及答案一、字符串變換問(wèn)題輸入一個(gè)長(zhǎng)度為n的二進(jìn)制字符串s(僅由'0'和'1'組成),每次操作可以選擇任意子串[l,r](1≤l≤r≤n),將s[l..r]中的每個(gè)字符異或1(即0變1,1變0)。求將s變?yōu)槿?所需的最少操作次數(shù)。輸入格式:第一行一個(gè)整數(shù)n(1≤n≤5×10?),第二行一個(gè)字符串s(長(zhǎng)度為n)。輸出格式:一個(gè)整數(shù),表示最少操作次數(shù)。樣例輸入1:510101樣例輸出1:3解答:最少操作次數(shù)等于字符串中連續(xù)“1”塊的數(shù)量。具體分析如下:連續(xù)的“1”可以通過(guò)一次翻轉(zhuǎn)操作變?yōu)椤?”。例如,字符串“110011”包含兩個(gè)連續(xù)的“1”塊(前兩位和后兩位),因此需要2次操作。遍歷字符串時(shí),記錄前一個(gè)字符是否為“0”。當(dāng)遇到“1”且前一個(gè)字符為“0”時(shí),說(shuō)明進(jìn)入一個(gè)新的“1”塊,操作次數(shù)加1。代碼實(shí)現(xiàn):```pythonn=int(input())s=input().strip()ifn==0:print(0)exit()count=0prev='0'初始前一個(gè)字符視為'0'forcins:ifc=='1'andprev=='0':count+=1prev=cprint(count)```二、資源約束下的項(xiàng)目收益最大化某公司有m個(gè)項(xiàng)目,每個(gè)項(xiàng)目需在時(shí)間區(qū)間[start_i,end_i)(左閉右開)內(nèi)進(jìn)行,占用r_i個(gè)資源,完成后獲得p_i的收益。公司最多同時(shí)提供R個(gè)資源。選擇若干不重疊(時(shí)間不重疊)的項(xiàng)目,求總收益的最大值。輸入格式:第一行兩個(gè)整數(shù)m和R(1≤m≤2000,1≤R≤200)。接下來(lái)m行,每行四個(gè)整數(shù)start_i,end_i,r_i,p_i(0≤start_i<end_i≤10?,1≤r_i≤R,1≤p_i≤10?)。輸出格式:一個(gè)整數(shù),表示最大總收益。樣例輸入2:320215241635210樣例輸出2:11解答:采用動(dòng)態(tài)規(guī)劃求解,步驟如下:1.排序:將項(xiàng)目按結(jié)束時(shí)間升序排序,便于快速查找不重疊的前驅(qū)項(xiàng)目。2.預(yù)處理前驅(qū):對(duì)每個(gè)項(xiàng)目i,用二分查找找到最大的j,使得end_j≤start_i。3.狀態(tài)定義:dp[i][r]表示前i個(gè)項(xiàng)目中,使用r資源的最大收益。4.狀態(tài)轉(zhuǎn)移:對(duì)于項(xiàng)目i,若選擇該項(xiàng)目,則需從其前驅(qū)項(xiàng)目j的狀態(tài)轉(zhuǎn)移而來(lái)(資源r≥r_i時(shí),dp[i][r]=max(dp[i][r],dp[j][rr_i]+p_i));若不選擇,則繼承前i-1個(gè)項(xiàng)目的狀態(tài)。代碼實(shí)現(xiàn):```pythonimportbisectm,R=map(int,input().split())projects=[]for_inrange(m):s,e,r,p=map(int,input().split())projects.append((e,s,r,p))按結(jié)束時(shí)間排序projects.sort()按end升序排序end_times=[proj[0]forprojinprojects]預(yù)處理每個(gè)項(xiàng)目的前驅(qū)(最后一個(gè)不重疊的項(xiàng)目)prev=[-1]mforiinrange(m):s_i=projects[i][1]當(dāng)前項(xiàng)目的start找最大的j,使得end_j<=s_ij=bisect.bisect_right(end_times,s_i)1ifj>=0:prev[i]=j動(dòng)態(tài)規(guī)劃,dp[r]表示當(dāng)前使用r資源的最大收益dp=[[-1](R+1)for_inrange(m+1)]dp[0][0]=0前0個(gè)項(xiàng)目,0資源,收益0foriinrange(1,m+1):e_i,s_i,r_i,p_i=projects[i1]不選第i個(gè)項(xiàng)目forrinrange(R+1):dp[i][r]=max(dp[i][r],dp[i1][r])選第i個(gè)項(xiàng)目j=prev[i1]前驅(qū)項(xiàng)目的索引(0-based)forr_previnrange(R+1r_i):ifdp[j+1][r_prev]!=-1:前驅(qū)是前j+1個(gè)項(xiàng)目(j是0-based)new_r=r_prev+r_iifnew_r>R:continuedp[i][new_r]=max(dp[i][new_r],dp[j+1][r_prev]+p_i)max_profit=max(dp[m][r]forrinrange(R+1))print(max_profitifmax_profit!=-1else0)```三、顏色變化限制的最短路徑給定有向圖,每條邊有長(zhǎng)度w和顏色c(0、1、2)。求從起點(diǎn)s到終點(diǎn)t的最短路徑,要求路徑中相鄰邊顏色變化次數(shù)不超過(guò)k次。輸入格式:第一行四個(gè)整數(shù)n,m,k,s,t(n≤1e4,m≤2e4,k≤10,s,t≤n-1)。接下來(lái)m行,每行四個(gè)整數(shù)u,v,w,c(0≤u,v≤n-1,w≤1e4,c∈{0,1,2})。輸出格式:一個(gè)整數(shù),表示最短路徑長(zhǎng)度;若無(wú)法到達(dá),輸出-1。樣例輸入3:45103012012312342025003102樣例輸出3:9解答:使用改進(jìn)的Dijkstra算法,狀態(tài)包含當(dāng)前節(jié)點(diǎn)、上一條邊的顏色(初始為-1)、已用顏色變化次數(shù)。優(yōu)先隊(duì)列按總長(zhǎng)度排序,每次擴(kuò)展時(shí)更新狀態(tài)。代碼實(shí)現(xiàn):```pythonimportheapqn,m,k,s,t=map(int,input().split())edges=[[]for_inrange(n)]for_inrange(m):u,v,w,c=map(int,input().split())edges[u].append((v,w,c))狀態(tài):(總長(zhǎng)度,當(dāng)前節(jié)點(diǎn),上一顏色,變化次數(shù))INF=float('inf')距離數(shù)組:dist[node][last_color][changes]=最短長(zhǎng)度last_color:-1(初始),0,1,2;changes:0~kdist=[[[INF](k+1)for_inrange(3)]for__inrange(n)]forcinrange(3):forchinrange(k+1):dist[s][c][ch]=INF初始狀態(tài):沒(méi)有前驅(qū)邊,變化次數(shù)0,總長(zhǎng)度0forchinrange(k+1):dist[s][-1][ch]=0用-1表示無(wú)顏色,實(shí)際存儲(chǔ)時(shí)用3代替(避免索引負(fù)數(shù))heap=[]heapq.heappush(heap,(0,s,-1,0))(length,node,last_color,changes)found=Falseans=INFwhileheap:length,u,last_c,changes=heapq.heappop(heap)ifu==t:ans=min(ans,length)found=Trueiflength>dist[u][last_c][changes]iflast_c!=-1elselength>dist[u][3][changes]:continue已找到更短路徑,跳過(guò)forv,w,cinedges[u]:new_changes=changesiflast_c!=-1:不是初始狀態(tài)ifc!=last_c:new_changes+=1ifnew_changes>k:continue超過(guò)顏色變化限制轉(zhuǎn)換last_c為非負(fù)數(shù)索引(-1→3)last_idx=last_ciflast_c!=-1else3current_dist=dist[u][last_idx][changes]ifcurrent_dist+w<dist[v][c][new_changes]:dist[v][c][new_changes]=current_dist+wheapq.heappush(heap,(dist[v][c][new_changes],v,c,new_changes))print(ansiffoundelse-1)```四、二維區(qū)間查詢統(tǒng)計(jì)給定數(shù)組A,每個(gè)元素有屬性x和y。進(jìn)行q次查詢,每次查詢給出a和b,求滿足x_i>a且y_i<b的元素個(gè)數(shù)。輸入格式:第一行兩個(gè)整數(shù)n和q(n≤1e5,q≤1e5)。接下來(lái)n行,每行兩個(gè)整數(shù)x_i,y_i。接下來(lái)q行,每行兩個(gè)整數(shù)a,b。輸出格式:對(duì)每個(gè)查詢,輸出一個(gè)整數(shù)。樣例輸入4:5235124124522342樣例輸出4:21解答:采用離線處理+樹狀數(shù)組。步驟如下:1.離散化y值:收集所有y_i和查詢的b,排序去重,映射為排名。2.排序元素和查詢:元素按x降序排序,查詢按a降序排序,并記錄原始索引。3.處理查詢:用指針遍歷元素,將x_i>a的元素的y插入樹狀數(shù)組,查詢y<b的數(shù)量。代碼實(shí)現(xiàn):```pythonimportbisectn,q=map(int,input().split())elements=[]y_values=[]for_inrange(n):x,y=map(int,input().split())elements.append((x,y))y_values.append(y)queries=[]foriinrange(q):a,b=map(int,input().split())queries.append((a,b,i))y_values.append(b)離散化y值y_sorted=sorted(list(set(y_values)))y_rank={y:i+1fori,yinenumerate(y_sorted)}樹狀數(shù)組從1開始元素按x降序排序elements.sort(key=lambdax:(-x[0],x[1]))查詢按a降序排序,并記錄原始索引queries.sort(key=lambdax:(-x[0],x[1]))樹狀數(shù)組classFenwickTree:def__init__(self,size):self.n=sizeself.tree=[0](self.n+2)defupdate(self,idx,delta=1):whileidx<=self.n:self.tree[idx]+=deltaidx+=idx&-idxdefquery(self,idx):res=0whileidx>0:res+=self.tree[idx]idx-=idx&-idxreturnresft=FenwickTree(len(y_sorted))ans=[0]qptr=0指向當(dāng)前處理的元素(按x降序)fora,b,idxinqueries:處理所有x>a的元素(即x降序中,x>a的元素)whileptr<nandelements[ptr][0]>a:y=elements[ptr][1]r=y_rank[y]ft.update(r)ptr+=1查詢y<b的數(shù)量,即離散化后排名小于b的排名的數(shù)量b_rank=bisect.bisect_left(y_sorted,b)第一個(gè)≥b的位置,左邊都是<b的count=ft.query(b_rank)樹狀數(shù)組中排名<=b_rank-1的數(shù)量(因?yàn)閥_sorted[b_rank]是第一個(gè)≥b的)ans[idx]=countforainans:print(a)```
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年六安市葉集區(qū)人民醫(yī)院招聘2人考試歷年真題匯編附答案
- 2025年溫州平陽(yáng)縣第二人民醫(yī)院醫(yī)共體公開招聘工作人員13人備考題庫(kù)附答案
- 2025年甘肅省平?jīng)鋈A亭市城鎮(zhèn)公益性崗位專場(chǎng)招聘會(huì)備考題庫(kù)(115人)附答案
- 2025年馬鞍山市民政局下屬事業(yè)單位招聘編外聘用人員3名考試模擬卷附答案
- 2025年黑龍江省神經(jīng)精神病醫(yī)院引進(jìn)高層次人才(博士)招聘4人備考題庫(kù)附答案
- 2025廣東廣州市黃埔區(qū)人民政府黃埔街道辦事處黨建組織員招聘1人(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2026廣東藍(lán)海豚旅運(yùn)股份有限公司招聘1人筆試備考試題及答案解析
- 2026北京協(xié)和醫(yī)院內(nèi)科ICU合同制科研助理招聘筆試模擬試題及答案解析
- 2026年1月西安醫(yī)學(xué)高等??茖W(xué)校附屬醫(yī)院招聘(58人)筆試模擬試題及答案解析
- (拓展拔高)2025-2026學(xué)年下學(xué)期人教統(tǒng)編版小學(xué)語(yǔ)文四年級(jí)第三單元練習(xí)卷
- 廣西南寧市2024-2025學(xué)年高二上學(xué)期期末教學(xué)調(diào)研數(shù)學(xué)試卷(含答案)
- 總承包工程技術(shù)標(biāo)述標(biāo)匯報(bào)
- 2023年馬克思主義基本原理概論讀書筆記
- 鋼筋桁架樓板配筋及撓度計(jì)算小工具
- TY/T 4001.1-2018汽車自駕運(yùn)動(dòng)營(yíng)地建設(shè)要求與開放條件
- GB/T 40692-2021政務(wù)信息系統(tǒng)定義和范圍
- GB/T 19022-2003測(cè)量管理體系測(cè)量過(guò)程和測(cè)量設(shè)備的要求
- 人工智能與教育的深度融合課件
- 國(guó)際經(jīng)濟(jì)法期末導(dǎo)學(xué)
- 案例onyx使用內(nèi)容
- 注塑機(jī)全年保養(yǎng)計(jì)劃
評(píng)論
0/150
提交評(píng)論