首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Codeforces Round #296 (Div. 2) A/B/C/D 題解合集

     編輯:關於C++

A. Playing with Paper

矩形紙張反覆剪正方形,求正方形總數。等價於求最大公約數過程中商的和,即輾轉相除法累加商。

long long a,b,ans=0;
while(b){ ans += a/b; long long r=a%b; a=b; b=r; }
cout << ans << endl;

B. Error Correct System

兩等長字符串 s,t,一次交換 s 中兩字符使漢明距離最小。預處理 pos[i][j] 記錄 s[i]=字符i, t[i]=字符j 的位置。檢查是否能減 2(存在互換對)或減 1(存在單向匹配)。

C. Glass Carving

w×h 玻璃,n 次水平/垂直切割,每次輸出最大面積。用兩個 ordered set 維護切割座標,兩個 multiset 維護間距。每次切割找鄰近切割點,更新間距 multiset,最大面積 = 最大寬間距 * 最大高間距。

D. Clique Problem

求最大團,NP-hard。但條件 |x_i - x_j| >= w_i + w_j 可轉化為區間不相交:令區間為 [x_i - w_i, x_i + w_i],條件等價於區間不相交。因此求最大不相交區間集,貪心按右端點排序選取。

sort(seg, seg+n, [](auto a, auto b){ return a.r < b.r; });
int ans=0, last=-INF;
for(auto s: seg) if(s.l >= last) { last = s.r; ++ans; }

總結

本場比賽涵蓋數論、字符串、數據結構、貪心等經典類型,題目轉化技巧性強,適合練習思維轉化能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved