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

Codeforces Round #285 解題報告:A、B、C 三題

     編輯:關於C++

A - Contest

水題。根據題目公式分別計算 Misha 和 Vasya 的分數,比較大小輸出獲勝者名字。分數計算:max(3*a/10, a - a/250*c)。

B - Misha and Changing Handles

模擬題。維護一個映射,記錄每個用戶的初始 handle 和當前 handle。輸入 n 條請求,每條給出 old_handle 和 new_handle。若 old_handle 已經是某個用戶的當前 handle,則更新該用戶的當前 handle 為 new_handle;否則創建新用戶記錄。最後輸出用戶數及每個用戶的初始與最終 handle。

C - Misha and Forest

圖論重構。給定 n 個節點的度數 d[i] 和異或和 x[i](鄰居編號的異或和)。從度為 1 的葉子節點入隊,每次取出葉子 u,其唯一鄰居 v = x[u],記錄邊 (u, v),更新 v:d[v]--, x[v] ^= u。若 v 變為葉子(d[v]==1)入隊。重複直到隊列為空。輸出邊數及所有邊。

代碼片段(C 題核心)

queue<int> q;
for (int i = 0; i < n; ++i) if (d[i] == 1) q.push(i);
while (!q.empty()) {
    int u = q.front(); q.pop();
    if (d[u] != 1) continue;
    int v = x[u];
    edges.push_back({u, v});
    d[v]--; x[v] ^= u;
    if (d[v] == 1) q.push(v);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved