堅持每日Codeforces三題挑戰:Day 4 - 題目詳解(2025-06-07,難度:1000, 1100, 1400)

前言:

此文章主要是記錄每天的codeforces刷題,還有就是給其他打算法競賽的人一點點點點小小的幫助(畢竟現在實力比較菜,題目比較簡單,但我還是會認真寫題解)。

之前忙學校事情,懈怠了一段時間,今天繼續,看能堅持到幾天!

開始先來點簡單的復健吧,目前分數1449,但是一段時間沒訓cf,實力應該不到1200,爭取20天后開始板刷1600。

每天堅持寫三道題第四天:

Problem - D - Codeforces?1000

Problem - B - Codeforces?1100

Problem - C - Codeforces?1400

目錄

題目一:

題目大意:

解題思路:

代碼(C++):

題目二:

題目大意:

解題思路:

代碼(C++):

題目三:

題目大意:

解題思路:

代碼(C++):


題目一:

Problem - D - Codeforces

題目大意:

定義字符串中字符的價值為在字母表中的位置,比如a為1,b為2...z為26。

定義字符串的價值為包含的字符價值和。

現在你需要從給定的只有小寫字母的字符串中刪除若干個元素保證字符串的價值和不超過p。

現在你要保證盡可能少的刪除字符。

輸出刪除字符后的字符串(可能為空)

解題思路:

從大到小的貪心。

我們每次刪除價值最大的字符就可以了。

具體實現方案,我們可以用一個數組同時記錄此處字符的價值和字符的下標。

然后根據價值從大到小排序,這樣就可以保證每次刪除的都是價值最大的字符了。

我們可以用一個set記錄需要刪除的下標,然后遍歷字符串輸出,遍歷到需要刪除的就跳過即可。

代碼(C++):

void solve() {std::string s;int p;std::cin >> s >> p;int n = s.size();//建立數組,a[i].first表示此時字符的價值,a[i].second表示字符的下標std::vector<std::pair<int, int>> a(n);int total = 0;for (int i = 0; i < n; i++) {int v = s[i] - 'a' + 1;a[i].first = v;total += v;a[i].second = i;}//根據字符的價值從大到小進行排序//也可以直接std::sort(a.begin(), a.end(), std::greater<>());,因為默認是根據第一個元素排序//我這里為了可讀性就這么寫了std::sort(a.begin(), a.end(), [](auto& v, auto& u) {return v.first > u.first;});//用set存需要刪除的下標std::set<int> index;for (int i = 0; i < n; i++) {if (total > p) {total -= a[i].first;index.insert(a[i].second);} else {break;}}for (int i = 0; i < n; i++) {//當set包含下標i,也就是說這個字符需要刪除,跳過不輸出即可if (index.count(i)) {continue;}std::cout << s[i];}std::cout << "\n";
}

題目二:

Problem - B - Codeforces

題目大意:

現在給你一個長度為n的數組a,現在詢問你是否可以重新排列這個數組,使得

min([a1,a2,…,ai])= gcd([ai+1,ai+2,…,an]).(下標從1開始的)。

也就是說,數組前面一部分的最小值,等于數組后面一段所有數字的gcd。

如果可以輸出Yes,否則輸出No。

解題思路:

我們首先得注意一點:對于一段序列a,gcd(a) <= min(a)是恒成立的。

所以把數組的最小值放在數組開頭,是最有可能滿足題目條件的。

我們設此時的a[0] = x。

那么數組前面連續一部分的最小值,是絕對等于x的,也就是等式左邊等于x

現在我們只需要:

1.在數組中找出是x的倍數的數(這些數組成的序列我設置成b)放在數組最后。

2.不斷求序列b的gcd,也就是等式右邊,當gcd(b) = x的時候即可表示存在這種情況。

代碼(C++):

void solve() {int n;std::cin >> n;std::vector<i64> a(n);i64 mn = 1e18 + 7;for (int i = 0; i < n; i++) {std::cin >> a[i];mn = std::min(mn, a[i]);}//找出最小值放在開頭for (int i = 0; i < n; i++) {if (a[i] == mn) {std::swap(a[i], a[0]);break;}}i64 g = 0;for (int i = 1; i < n; i++) {//是a[0]的倍數if (a[i] % a[0] == 0) {g = std::gcd(g, a[i]);if (g == a[0]) {std::cout << "Yes\n";return;}}}std::cout << "No\n";
}

題目三:

Problem - C - Codeforces

題目大意:

現在有一個n * m的矩陣,起初,這個矩陣滿足,所有的行和列都滿足相加的和相等。

也就是每一行的和都相等,每一列的和都相等,并且任意一行的和等于任意一列的和。

現在一個物體從矩陣的左上方(1, 1)移動到矩陣的右下方(n, m)。

已知這個矩陣的運動路徑,D為向下移動,R為向右移動。

經過的方格都會變成0。

現在讓你把方格復原,也就是復原這個物體運動路徑上的數,使得矩陣的性質不變(行和列相等)。

輸出最終復原后的矩陣。輸出一種復原情況即可。

解題思路:

首先需要注意到并且理解兩個點:

1.物體從左上角移動到右下角,不管怎么走,都會保證每一行每一列至少有一個經過的點(也就是說每行每列中至少存在一個0)。

2.根據1來推理得出,我們只需要修改“每行每列中的0”來調整每一行每一列的和,使其相等即可。

通過上述分析,問題可以轉化成,我們需要找出一個和sum,使得方便調整。

注意到:這個和sum = 0的時候最容易調整。

代碼實現的時候,可以這么實現:

用i,j表示此時的位置,我們重新走一遍“物體走過的路”:

如果是此時向下走,那么表示需要根據這一列的情況來修改(i, j)處的0。

既然我們要讓行和列的和都為0,那么我們可以計算出整個列的和sum_col,然后把此處的0修改成-sum_col即可,這樣就可以滿足列的值為0了

如果是向右走,那么就表示這一行有一個多出的0,同理進行修改即可。

具體實現可以參考代碼。我這里參考的是jiangly老師的寫法。

注意可能錯的點:給出的字符串長度是n + m - 2,我們實際走的路程是n + m - 2但是實際經過的位置數量是n + m - 1,所以實現的時候要么是開頭位置特判,要是是結尾特判。

代碼(C++):

void solve() {int n, m;std::string s;std::cin >> n >> m >> s;std::vector a(n, std::vector<i64> (m));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {std::cin >> a[i][j];}}//用(i, j)表示此時的位置,我們重新走一遍這個路線int i = 0, j = 0;while (i + j < n + m - 1) {//如果此時是向下走//特判最后一個位置if (s[i + j] == 'D' || i + j == n + m - 2) {i64 res = 0;//計算這一列的和for (int x = 0; x < m; x++) {res += a[i][x];}a[i][j] = -res;i++;} else if (s[i + j] == 'R') {i64 res = 0;for (int y = 0; y < n; y++) {res += a[y][j];}a[i][j] = -res;j++;}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {std::cout << a[i][j] << " ";}std::cout << "\n";}
}

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

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

相關文章

6.7本日總結

一、英語 復習默寫list10list19&#xff0c;07年第3篇閱讀 二、數學 學習線代第一講&#xff0c;寫15講課后題 三、408 學習計組第二章&#xff0c;寫計組習題 四、總結 本周結束線代第一講和計組第二章&#xff0c;之后學習計網4.4&#xff0c;學完計網4.4之后開操作系…

PGSR : 基于平面的高斯濺射高保真表面重建【全流程分析與測試!】【2025最新版!!】

【PGSR】: 基于平面的高斯濺射高保真表面重建 前言 三維表面重建是計算機視覺和計算機圖形學領域的核心問題之一。隨著Neural Radiance Fields (NeRF)和3D Gaussian Splatting (3DGS)技術的發展&#xff0c;從多視角RGB圖像重建高質量三維表面成為了研究熱點。今天我們要深入…

從認識AI開始-----AutoEncoder:生成模型的起點

前言 從15年開始&#xff0c;在深度學習的重要模型中&#xff0c;AutoEncoder&#xff08;自編碼器&#xff09;可以說是打開生成模型世界的起點。它不僅是壓縮與重建的工具&#xff0c;更是VAE、GAN、DIffusion等復雜生成模型的思想起源。其實AutoEncoder并不復雜&#xff0c;…

解決MySQL8.4報錯ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

最近使用了MySQL8.4 , 服務啟動成功,但是就是無法登陸,并且報錯: ERROR 1524 (HY000): Plugin mysql_native_password is not loaded 使用如下的命令也報錯 mysql -u root -p -P 3306 問題分析: 在MySQL 8.0版本中,默認的認證插件從mysql_native_password變更為cachi…

TDengine 開發指南——無模式寫入

簡介 在物聯網應用中&#xff0c;為了實現自動化管理、業務分析和設備監控等多種功能&#xff0c;通常需要采集大量的數據項。然而&#xff0c;由于應用邏輯的版本升級和設備自身的硬件調整等原因&#xff0c;數據采集項可能會頻繁發生變化。為了應對這種挑戰&#xff0c;TDen…

嵌入式面試高頻(5)!!!C++語言(嵌入式八股文,嵌入式面經)

一、C有幾種傳值方式之間的區別 一、值傳遞&#xff08;Pass by Value&#xff09; 機制&#xff1a;創建參數的副本&#xff0c;函數內操作不影響原始數據語法&#xff1a;void func(int x)特點&#xff1a; 數據安全&#xff1a;原始數據不受影響性能開銷&#xff1a;需要復…

Spark 之 AQE

個人其他鏈接 AQE 執行順序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 產生 AQE 的 循環觸發點 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…

FSMC擴展外部SRAM

提示&#xff1a;文章 文章目錄 前言一、背景二、2.12.2 三、3.1 總結 前言 前期疑問&#xff1a; 本文目標&#xff1a; 一、背景 2025年6月7日 19:34:48 今天看了FSMC擴展外部SRAM的文章&#xff0c;大概理解到stm32除了內部存儲器&#xff0c;還可以擴展外部存儲器。其中s…

【CSS-6】深入理解CSS復合選擇器:提升樣式表的精確性與效率

CSS選擇器是前端開發的基石&#xff0c;而復合選擇器則是其中最強大且實用的工具之一。本文將全面解析CSS復合選擇器的類型、用法、優先級規則以及最佳實踐&#xff0c;幫助你編寫更高效、更精確的樣式表。 1. 什么是復合選擇器&#xff1f; 復合選擇器是通過組合多個簡單選擇…

使用python實現奔跑的線條效果

效果&#xff0c;展示&#xff08;視頻效果展示&#xff09;&#xff1a; 奔跑的線條 from turtle import * import time t1Turtle() t2Turtle() t3Turtle() t1.hideturtle() t2.hideturtle() t3.hideturtle() t1.pencolor("red") t2.pencolor("green") t3…

從零搭建uniapp項目

目錄 創建uni-app項目 基礎架構 安裝 uni-ui 組件庫 安裝sass依賴 easycom配置組件自動導入 配置view等標簽高亮聲明 配置uni-ui組件類型聲明 解決 標簽 錯誤 關于tsconfig.json中提示報錯 關于非原生標簽錯誤&#xff08;看運氣&#xff09; 安裝 uview-plus 組件庫…

Redis主從復制的原理一 之 概述

概述 本文概要性的介紹了Redis主從復制原理&#xff0c;及新舊版本主從復制的區別&#xff0c;優缺點。具體的主從復制過程可詳見「Redis主從復制原理二 之 主從復制工作流程」 舊版主從復制的實現 Redis的復制功能分為 同步&#xff08;sync&#xff09;和 命令傳播&#xff…

網絡原理 4-TCP3

上篇文章&#xff0c;我們講了TCP協議的連接管理&#xff08;”三次握手“和”四次揮手“的過程&#xff09;。 4、滑動窗口 這個滑動窗口是TCP中非常有特點的機制。我們知道&#xff0c;TCP是通過前面講的三個機制&#xff1a;確認應答&#xff0c;超時重傳&#xff0c;連接…

【使用 Loki + Promtail + Grafana 搭建輕量級容器日志分析平臺】

使用 Loki Promtail Grafana 搭建輕量級容器日志分析平臺 摘要 本文介紹如何通過 Docker Compose 快速搭建 Loki 日志存儲、Promtail 日志采集和 Grafana 日志可視化/告警的完整流程。用最小化示例演示核心配置、常見問題排查和告警規則設置&#xff0c;幫助讀者快速上手。…

CRMEB 中 PHP 快遞查詢擴展實現:涵蓋一號通、阿里云、騰訊云

目前已有一號通快遞查詢、阿里云快遞查詢擴展 擴展入口文件 文件目錄 crmeb\services\express\Express.php 默認一號通快遞查詢 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自動化 Word 文檔樣式復制與內容生成

在辦公自動化領域&#xff0c;如何高效地處理 Word 文檔的樣式和內容復制是一個常見需求。本文將通過一個完整的代碼示例&#xff0c;展示如何利用 Python 的 python-docx 庫實現 Word 文檔樣式的深度復制 和 動態內容生成&#xff0c;并結合知識庫中的最佳實踐優化文檔處理流程…

【MATLAB代碼】基于MCC(最大相關熵)的EKF,一維濾波,用于解決觀測噪聲的異常|附完整代碼,訂閱專欄后可直接查看

本文所述的代碼實現了一種基于最大相關熵準則(Maximum Correntropy Criterion, MCC)的魯棒性卡爾曼濾波算法(MCC-KF),重點解決傳統卡爾曼濾波在觀測噪聲存在異常值時估計精度下降的問題。通過引入高斯核函數對殘差進行加權處理,有效降低了異常觀測值對狀態估計的干擾。訂…

46、web實驗-遍歷數據與頁面bug修改

46、web實驗-遍歷數據與頁面bug修改 在Web開發中&#xff0c;遍歷數據和修改頁面bug是常見的任務。以下是關于這兩個主題的講解&#xff1a; ### 一、遍歷數據 **目的**&#xff1a;在頁面上動態展示數據&#xff0c;例如用戶列表、商品信息等。 **常用方法**&#xff1a; ####…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手

華為云FlexusDeepSeek征文&#xff5c;體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺&#xff0c;覆蓋從數據準備到模型部署的全生命周期管理&#xff0c;幫助…

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token 目錄 Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token功能解析工作機制應用場景舉例說明技術要點在自然語言處理(NLP)領域 都是<CLS> + <SEP>嗎?一、CLS和SEP的作用與常見用法1. **CLS標…