AtCoder Beginner Contest 409 題解

本文為AtCoder Beginner Contest 409 的詳細題解

目錄

題目A:

題目大意:

解題思路:

代碼(C++):

題目B:

題目大意:

解題思路:

代碼(C++):

題目C:

題目大意:

解題思路:

代碼(C++):

題目D:

題目大意:

解題思路:

代碼(C++):

題目E:

題目大意:

解題思路:

代碼(C++):


題目A:

A - Conflict

題目大意:

給你兩個長度為n的字符串s和t,都只包含小寫字母‘x’,'o'。

現在要找出是否有一個下標i滿足s[i] == t[i] == 'o'

解題思路:

直接可以題目意思進行代碼實現即可。

遍歷一遍,找到滿足條件的輸出Yes即可

具體看代碼實現。

代碼(C++):

void solve() {int n;std::string s, t;std::cin >> n >> s >> t;int ans = 0;for (int i = 0; i < n; i++) {if (s[i] == t[i] && s[i] == 'o') {std::cout << "Yes\n";return;}}std::cout << "No\n";
}

題目B:

B - Citation

題目大意:

現在給你一個數組a,你需要找出滿足下面條件的最大的整數x:

x滿足,在數組a中,大于或等于x的元素在數組中至少出現x次。

解題思路:

我們先從最小的開始看,從特殊到一般:

大于等于0的元素在數組中至少出現0次。

大于等于1的元素在數組中至少出現1次。

大于等于2的元素在數組中出現至少2次。

...

我們很明顯可以注意到一點:

隨著x的值增加,就表明我們需要在數組中找到更多的數字來滿足大于x。

每增加1就需要多找一個數字滿足a[i] > x。

那么總會有一個臨界點的x,使得數組中無法再找出x個數字來滿足大于它了。

那么思路就可以來了,我們直接從數組元素中最大的開始,可以先對數組排序,將x的初始值設置為0,從數組中最大的開始,如果能找到這樣一個x,就讓x++即可。

代碼(C++):

void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}std::sort(a.begin(), a.end(), std::greater<>());int x = 0;for (int i = 0; i < n; i++) {if (a[i] >= x + 1 && i >= x) {x++;}}std::cout << x << "\n";
}

題目C:

C - Equilateral Triangle

題目大意:

給你一個周長為L的圓,現在圓上有n個點。

給你n - 1個數字di, 其中di表示第i + 1個點位于第i個點沿著圓周順時針di的位置。

其中L和di都為整數。

現在你需要找出在圓上不同的三個點,使得這三個點組成的三角形為等邊三角形。

解題思路:

首先得明白關鍵點:

周長L和每一個點的距離d都是都是整數,那么我們要找到這樣一個等邊三角形的話,三個點一定是將圓平分成三等分的(這個可以通過連接點和圓心,進行簡單的證明)。

既然能三等分周長,那么周長必須是3的倍數。

距離d都是整數,周長為L,我們可以把圓劃分成L段,然后計算出每個整數位置的點的個數。

我們可以第0個點的位置設置成0,然后根據題目中給的d計算出每一個位置中點的個數。

假設構成等邊三角形的其中一個點的位置為i,那么根據上面的分析,剩下的兩個點的位置為i + L?/ 3, i + 2 * L?/ 3,也就是分別加上L?/ 3。

最后滿足這樣的三角形的三個不同點的個數,可以用乘法原理做,最后除以三即可。

具體看代碼實現。

代碼(C++):

void solve() {int n, l;std::cin >> n >> l;std::vector<int> cnt(l);cnt[0] = 1;int pos = 0;for (int i = 0; i < n - 1; i++) {int d;std::cin >> d;pos = (pos + d) % l;cnt[pos]++;}if (l % 3 != 0) {std::cout << "0\n";return;}i64 ans = 0;for (int i = 0; i < l; i++) {ans += 1LL * cnt[i] * cnt[(i + l / 3) % l] * cnt[(i + l * 2 / 3) % l];}std::cout << ans / 3 << "\n";
}

題目D:

D - String Rotation

題目大意:

給你一個長度為n的字符串s,現在你可以進行以下操作一次:

選擇一個下標i,將s[i]插入到字符串的任意位置,并且刪除s[i]。

你需要進行一次操作,使得字符串字典序最小,找出字典序最小的這個字符串。

解題思路:

兩個字符串的字典序有一個很常規的比較方法:

從最左邊的字符開始比較,逐一比較,當遇到兩個不同的字符的時候,比較這兩個字符的字典序即可,字符小的那個字符串,即為字典序小的字符串。

題目的意思其實就是把字符中的一個字符進行移動,然后使得字典序盡可能小。

也就是說,字符串的字符構成是不變的。

根據上述分析我們可以得出:

1.在所有的字符字符從小到大排列(也就是升序排列)的時候,此時字符串的字典序最小。

2.我們從前往后對比,當遇到字符不是按升序排列的那個字符的時候,把這個字符往后面放,使得字符串前部分按照升序排列即可。

代碼參考官方題解

代碼(C++):

void solve() {int n;std::string s;std::cin >> n >> s;int l = -1;for (int i = 0; i < n - 1; i++) {if (s[i] > s[i + 1]) {l = i;break;}}if (l == -1) {std::cout << s << "\n";return;}int r = n;for (int i = l + 1; i < n; i++) {if (s[l] < s[i]) {r = i;break;}}std::string ans = s.substr(0, l) + s.substr(l + 1, r - l - 1) + s[l] + s.substr(r);std::cout << ans << "\n";
}

題目E:

E - Pair Annihilation

題目大意:

現在有一顆包含n個節點的樹,并且給出你邊的連接關系和邊的權重:

節點ui和vi之間有一條權重為wi的邊。

現在這個樹的每一個節點上都有xi個正電子或者xi個電子。

你把一個正電子或者電子從節點ui移動到節點vi需要消耗wi個單位的能量,一個正電子和一個電子相遇會湮滅消失。

保證樹上的正電子的數目和電子數目相等。

現在你需要通過移動其中的正電子或者電子,是得所有的電子消失,輸出需要消耗的最小能量。

解題思路:

題目的關鍵點是,保證正電子數量和電子數量相等。

既然是一個樹,那么顯而易見的適合的移動方案:

把葉子節點的電子或者正電子,往根節點移動,全部移到根節點。

代碼參考官方題解

代碼(C++):

void solve() {int n;std::cin >> n;std::vector<i64> X(n);for (int i = 0; i < n; i++) {std::cin >> X[i];}std::vector<std::vector<std::pair<int, i64>>> Trees(n);for (int i = 0; i < n - 1; i++) {int u, v;i64 w;std::cin >> u >> v >> w;u--;v--;Trees[u].push_back({v, w});Trees[v].push_back({u, w});}i64 ans = 0;std::function<void(int, int)> dfs;dfs = [&](int v, int fa) -> void {for (auto& [c, w] : Trees[v]) {if (c == fa) {continue;}//往下搜子節點dfs(c, v);//加上此時下面所有的子節點移動到此時這個根節點所需要的能量ans += w * abs(X[c]);//移動,并且進行消耗(正負抵消)X[v] += X[c];}};dfs(0, -1);std::cout << ans << "\n";
}

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

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

相關文章

Spring @Environment 典型用法

簡單說&#xff1a;Spring 里沒有直接叫 Environment 的注解&#xff0c;更準確說常用的是 Autowired 注入 Environment 對象&#xff0c;或者結合 Value 配合 Environment 讀取配置 。 支持從以下來源讀取&#xff1a; 1、application.properties / .yaml 2、JVM 參數&#xf…

【集合與結構體】5.2(課本題)總結代碼

ds老師產物&#xff0c;純為期末復習&#xff0c;自用。 題目1 編寫程序&#xff0c;將一個整型變量右移 4 位&#xff0c;并以二進制數形式輸出該整數在移位前和移位后的數值。 //觀察系統填補空缺的數位情況 代碼解答 #include <iostream>//編寫程序&#xff0c;將一個…

16.max/min最大最小值函數

1.基本使用 max/min函數返回滿足where條件的一列的最大/最小值。 select max(column_name)|min(column_name) from table_namewhere where_definition 示例&#xff1a; ①求班級總分的最高分 #求班級總分的最高分 SELECT MAX(math_scorechinese_scoreenglish_score)AS 總分…

需要做一款小程序,用來發券,后端如何進行設計能夠保證足夠安全?

溫馨提示&#xff1a;本文由ai生成&#xff0c;請辨別閱讀&#xff0c;本文僅提供一種思考的方式和設計思路 設計一個安全的后端系統&#xff0c;用于發放優惠券的小程序&#xff0c;需要考慮多個安全層面&#xff0c;包括身份驗證、數據安全、API 安全、以及防止常見攻擊&…

ACM設計平臺-核心模塊解析-趙家康

負責模塊解析-趙家康 一、Login.vue 功能邏輯、數據綁定、表單驗證、與后端交互 Vue 登錄頁面的代碼設計 代碼功能概覽 代碼實現了一個典型的登錄頁功能&#xff0c;核心包括&#xff1a; 表單輸入&#xff08;學號、用戶名、密碼、驗證碼&#xff09; 驗證碼生成與校驗 勾…

在 VMware (WM) 虛擬機上安裝的 Ubuntu 22.04 分配了 20GB 磁盤,但僅使用 10GB 就顯示 “空間已滿“

可能原因及解決方案 虛擬機磁盤未實際擴容&#xff08;僅調整了虛擬大小&#xff09; 現象&#xff1a;在 VMware 里調整了磁盤大小&#xff08;如 20GB → 50GB&#xff09;&#xff0c;但 Ubuntu 內部仍只識別 10GB。 原因&#xff1a;VMware 調整的是虛擬磁盤上限&#xf…

初學STM32全功能按鍵非阻塞式實現和強化

其實筆者以前學51的時候按鍵功能就包含非阻塞式的&#xff0c;而且還包括矩陣按鍵的非組塞式按鍵實現。開關的長短鍵功能筆者在之前的51博文中筆者自己嘗試寫過&#xff0c;功能是有了但寫的其實很混亂&#xff0c;幾乎沒有移植的價值。這次江科大剛好出了新的教程&#xff0c;…

【網絡原理】網絡原理簡單認識 —— 內含網絡通信基礎、五元組、網絡協議(OSI 七層協議、TCP/IP 五層(或四層)協議)、封裝和分用

目錄 1. 網絡互連 1.1 局域網LAN 1.2 廣域網WAN 2 網絡通信基礎 2.1 IP地址 2.2 端口號 2.3 網絡協議 3. 五元組 4. 協議分層 4.1 OSI 七層網絡模型 4.2 TCP/IP 五層&#xff08;或四層&#xff09;網絡模型 4.3 網絡設備所在分層(經典筆試題) 5. 網絡數據傳輸的基…

嵌入式之硬件學習(三)通信方式、串口通信

目錄 一、通信種類 1、并行通信 2、串行通信 3、單工模式(Simplex Communication) 4、半雙工通信(Half-Duplex Communication) 5、全雙工通信(Full-Duplex Communication) 6、串行的異步通信與同步通信 &#xff08;1&#xff09;異步通信 &#xff08;2&#xff09;同…

【微信小程序】3、SpringBoot整合WxJava發送訂閱消息

1、創建消息模板 在公共模板庫里面選擇符合自己業務場景的消息模板&#xff0c;例如&#xff1a; 每個消息模板最多選擇5項&#xff0c;可根據自己業務需求自行選擇&#xff0c;順序也可以自己決定。提交后&#xff0c;我們就得到了屬于自己的消息模板ID 2、文檔閱讀 官方文…

Flask 快速精通:從入門到實戰的輕量級 Web 框架指南

Flask 作為 Python 生態中最受歡迎的輕量級 Web 框架&#xff0c;以其簡潔靈活的設計理念贏得了開發者的青睞。本文將系統梳理 Flask 的核心概念與實戰技巧&#xff0c;幫助你快速掌握這一強大框架。 一、Flask 框架概述 1.1 輕量級框架的核心特性 Flask 誕生于 2010 年&…

Python爬取豆瓣短評并生成詞云分析

一、項目概述 本項目的目標是爬取豆瓣上某部電影的短評數據&#xff0c;并生成詞云進行情感分析。我們將使用Python編程語言&#xff0c;借助爬蟲技術獲取數據&#xff0c;并利用自然語言處理和數據可視化工具進行分析。具體步驟包括&#xff1a; 爬取豆瓣短評數據。數據清洗…

Controller Area Network (CAN) 通信機制簡介

目錄 1. CAN 概述 2. 物理結構與傳輸機制 3. 消息格式與仲裁機制 4. 錯誤檢測與總線狀態 5. 工業用 CAN 接口 6. 本講總結 1. CAN 概述 CAN&#xff08;Controller Area Network&#xff09;是由德國博世&#xff08;Bosch&#xff09;公司于 1983 年提出的串行通信協議…

我有一個想法

我有一個想法 我想為家鄉做點事情&#xff0c;但是又不知道從哪里開始。 也許為家鄉的教育做點事情是比較靠譜的。 于是&#xff0c;我就想到了&#xff0c;是不是可以在高中學校&#xff0c;設立一個“鴻鵠”獎學金&#xff1f; 這個獎學金怎么使用呢&#xff1f; 在每年9月份…

【Pandas】pandas DataFrame stack

Pandas2.2 DataFrame Reshaping sorting transposing 方法描述DataFrame.droplevel(level[, axis])用于**從 DataFrame 的索引&#xff08;行或列&#xff09;中刪除指定層級&#xff08;level&#xff09;**的方法DataFrame.pivot(*, columns[, index, values])用于重塑 Dat…

Java 自動關閉資源語法糖 - try-with-resources

文章目錄 Java 自動關閉資源語法糖 - try-with-resources前言優勢1、自動資源管理2、處理多重資源3、異常處理更健壯4、適用條件 總結 Java 自動關閉資源語法糖 - try-with-resources 前言 日常開發中&#xff0c;我們經常會看到如下代碼&#xff1a; try (InputStream is …

MyBatis中的動態SQL是什么?

大家好&#xff0c;我是鋒哥。今天分享關于【MyBatis中的動態SQL是什么&#xff1f;】面試題。希望對大家有幫助&#xff1b; MyBatis中的動態SQL是什么&#xff1f; 超硬核AI學習資料&#xff0c;現在永久免費了&#xff01; MyBatis中的動態SQL指的是根據不同的條件&#x…

【Java反射】如何新增對象中的屬性,與JavaScript中的直接添加屬性有什么區別?

問&#xff1a; Object obj new Object(); //獲取一個類的class對象 Class<?> objClass Object.class; try { //通過newInstance方法創建一個新的屬性 Field newField Field.class.newInstance(); newField.setAccessible(true); newField.set(obj, “index”); }ca…

java spring boot Swagger安裝及使用

https://springdoc.org/ 可能原因分析 &#x1f50d; 原因 1&#xff1a;SpringFox 版本與 Spring Boot 版本不兼容 ? SpringFox 3.0.0 不完全兼容 Spring Boot 2.6 及更高版本&#xff0c;可能導致 NullPointerException。 Spring Boot 3.x 完全不支持 SpringFox&#xff0c…

電商云倉/前置倉的物流高效監控、管理、預警系統,快遞鳥DMS

在電商行業蓬勃發展的當下&#xff0c;電商云倉和前置倉作為物流配送體系的關鍵環節&#xff0c;其高效運作直接影響著消費者體驗與企業競爭力。快遞鳥 DMS 物流交付管理平臺&#xff0c;以其卓越的物流監控、管理及預警功能&#xff0c;成為電商企業優化云倉和前置倉物流管理的…