Educational Codeforces Round 166(Div.2) A~D

A.Verify Password(字符串)

題意:

Monocarp正在開發他的新網站,目前面臨的挑戰是如何讓用戶選擇強密碼。

Monocarp認為,強密碼應滿足以下條件:

  • 密碼只能由小寫拉丁字母和數字組成;
  • 字母后面不能有數字(因此,每個字母后面要么有另一個字母,要么字符串結束);
  • 所有數字應按非遞減順序排序;
  • 所有字母應按非遞減順序排序。

請注意,密碼可以只有字母或數字。

Monocarp成功地實現了第一個條件,但他在其余條件上很吃力。您能幫他驗證密碼嗎?

分析:

按照 A S C I I ASCII ASCII值進行比較(因為字母的 A S C I I ASCII ASCII本來就在數字后面)。只要找到前面比后面的數大就輸出 N O NO NO,反之 Y E S YES YES

代碼:

#include<bits/stdc++.h>
using namespace std;void solve(){int n;cin>>n;string s;cin>>s;bool flag = true;for (int i = 1; i < n; i++){if (isalpha(s[i - 1]) && isdigit(s[i])){flag = false;break;}if(s[i - 1] > s[i]){flag = false;break;}}if(flag)cout<<"YES"<<endl;elsecout<<"NO"<<endl;
}int main(){int t;cin>>t;while(t--){solve();}return 0;
}

B.Increase/Decrease/Copy(思維)

題意:

給你兩個整數數組:長度為 n n n的數組 a a a和長度為 n + 1 n+1 n+1的數組 b b b

你可以按任意順序執行下列操作任意次數:

  • 選擇數組 a a a中的任意元素,并將其增加 1 1 1
  • 選擇數組 a a a中的任意元素,并將其減少 1 1 1
  • 選擇數組 a a a中的任意元素,復制并追加到數組 a a a的末尾。

你的任務是計算將數組 a a a轉換為數組 b b b所需的最少上述操作次數(可能為零)。可以證明,在問題的限制條件下,這總是可能的。

分析:

對于 a i ? > b i , 1 ≤ i ≤ n a_i->b_i,1\le i\le n ai??>bi?,1in,轉變的最小代價就是它們的差值。

對于 b n + 1 b_{n+1} bn+1?,得到它的最小代價就是 a i ? > b i a_i->b_i ai??>bi?過程中與它最小的差值 + 1 +1 +1

代碼:

#include<bits/stdc++.h>typedef long long LL;
using namespace std;
#define INF 0x7fffffffvoid solve() {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; i++) {cin >> a[i];}vector<int> b(n + 1);for (int i = 0; i < n + 1; i++) {cin >> b[i];}int need = INF;LL ans = 0;for (int i = 0; i < n; i++) {ans += abs(b[i] - a[i]);need = min(need, abs(b[n] - b[i]));need = min(need, abs(b[n] - a[i]));if (a[i] < b[n] && b[n] < b[i] || a[i] > b[n] && b[n] > b[i])need = 0;}cout << ans + need + 1 << endl;
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

C.Job Interview(枚舉)

題意:

Monocarp打算開一家自己的IT公司。他想招聘 n n n名程序員和 m m m名測試員。

n + m + 1 n+m+1 n+m+1名候選人,按到達時間順序從 1 1 1 n + m + 1 n+m+1 n+m+1依次編號。第 i i i個候選人的編程技能為 a i a_i ai?,測試技能為 b i b_i bi?(一個人的編程技能和測試技能是不同的)。團隊的技能是所有被聘為程序員的候選人的編程技能之和,以及所有被聘為測試員的候選人的測試技能之和。

當應聘者前來面試時,Monocarp會嘗試將其分配到最適合的職位(如果應聘者的編程技能較高,則錄用其為程序員,否則錄用其為測試員)。如果該職位的所有名額都已招滿,Monocarp就會將他們分配到其他職位。

你的任務是,針對每個候選人,計算如果除他們之外的所有人都來面試,團隊的技能。請注意,這意味著正好有 n + m n+m n+m名候選人來參加面試,因此公司的所有 n + m n+m n+m個職位都將被填滿。

分析:

從前往后遍歷,檢查一下是 a a a能力值浪費了還是 b b b能力值浪費了,然后從后往前枚舉,開一個數組維護一下最近后綴損失能力值。輸出答案的時候,如果當前的人的站的職位剛好是能力值被浪費的職位,輸出總和減去當前的人的能力值加上最近損失能力值。

代碼:

#include<bits/stdc++.h>typedef long long LL;
using namespace std;
const LL N = 1e6 + 10;
LL q[N], p[N], a[N], b[N];void solve() {LL n, m;cin >> n >> m;LL sum1, sum2, num1, num2, f;sum1 = sum2 = num1 = num2 = f = 0;for (int i = 0; i <= n + m; i++) {cin >> a[i];q[i] = p[i] = 0;}for (int i = 0; i <= n + m; i++) {cin >> b[i];f += a[i] > b[i];if (a[i] > b[i] && num1 <= n || m == i - num1) {num1++;sum1 += a[i];p[i] = 1;} elsesum1 += b[i];if (a[i] < b[i] && num2 <= m || n == i - num2) {num2++;sum2 += b[i];q[i] = 1;} elsesum2 += a[i];}for (int i = 0; i <= n + m; i++) {cout << " ";cout << (f > n ? (p[i] ? sum1 - a[i] : sum2 - b[i]) : (q[i] ? sum2 - b[i] : sum1 - a[i]));}
}int main() {int t;cin >> t;while (t--) {solve();}return 0;
}

D.Invertible Bracket Sequences(前綴和、雙指針)

題意:

正則括號序列是指可以通過在序列的原始字符之間插入字符"1"和"+"來轉換成正確算術表達式的括號序列。例如

  • 括號序列"()()“和”(())“是正則表達式(得到的表達式是”(1)+(1)“和”((1+1)+1)");
  • 括號序列")(“、”(“和”)"則不是。

讓我們定義括號序列的逆序如下:用’)‘替換所有括號’(‘,反之亦然(用’(‘替換所有括號’)')。例如,字符串"()((“和”)())"互為反義詞。

給你一個正則括號序列 s s s。計算如果將 s s s中從第 l l l個字符到第 r r r個字符(包括)的子串 s s s替換為其逆序數, s s s仍然是正則括號序列的整數對 ( l , r ) (l,r) (l,r)( 1 ≤ l ≤ r ≤ ∣ s ∣ 1\le l\le r\le|s| 1lrs)的個數。

分析:

統計序列前 i i i個有多少個左括號是剩余的,然后思考 ( l , r ) (l,r) (l,r)的選擇有何特征:可以發現,若第 i i i位之前所剩余的左括號跟第 j j j位之前所剩余的左括號數量一樣,那么 ( i + 1 , j ) (i+1,j) (i+1,j)這個區間就可能被選擇,否則一定不會被選擇。

因此我們將剩余左括號數量相同的位置放一起,然后考慮其區間能否真的被選中。通過觀察可以發現:若 ( i , j ) (i,j) (i,j)之間位置的剩余左括號數量小于等于第 i i i位之前所剩余的左括號的兩倍,那么這個區間就可以被選中,因此本題轉換成 R M Q RMQ RMQ問題。

在枚舉位置時,隨著起始位置的增大,末尾位置也一定是非遞減的,因此用雙指針可以將復雜度從 O ( n 2 l o g n ) O(n^{2}logn) O(n2logn)變為 O ( n l o g n ) O(nlogn) O(nlogn)

代碼:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const LL N = 5e05 + 10;LL n;
vector<LL> a(N, 0);LL Max[N][21];
LL Min[N][21];struct ST {void init() {for (LL i = 1; i <= n; i++) {Max[i][0] = a[i];Min[i][0] = a[i];}}void work() {for (LL j = 1; j <= 21; j++)for (LL i = 1; i + (1 << j) - 1 <= n; i++) {Max[i][j] = max(Max[i][j - 1], Max[i + (1 << (j - 1))][j - 1]);Min[i][j] = min(Min[i][j - 1], Min[i + (1 << (j - 1))][j - 1]);}}LL QueryMax(LL l, LL r) {LL k = log2(r - l + 1);return max(Max[l][k], Max[r - (1 << k) + 1][k]);}LL QueryMin(LL l, LL r) {LL k = log2(r - l + 1);return min(Min[l][k], Min[r - (1 << k) + 1][k]);}
};void solve() {string s;cin >> s;s = "0" + s;LL len = s.size();n = len + 5;a[0] = 0;vector<LL> st[len];for (LL i = 1; i < len; i++) {if (s[i] == '(') {a[i] = a[i - 1] + 1;} else {a[i] = a[i - 1] - 1;}st[a[i]].push_back(i);}ST st1;st1.init();st1.work();LL cnt = 0;for (LL i = 1; i < len; i++) {if (st[i].size() <= 1)continue;LL len = st[i].size();LL r = 0;for (LL l = 0; l < len; l++) {if (r == len) {cnt += (r - l - 1);continue;}LL left = st[i][l];LL right = st[i][r];while (r < len && st1.QueryMax(left, right) <= i * 2) {r++;if (r == len) {break;}right = st[i][r];}cnt += (r - l - 1);}}cout << cnt << endl;
}int main() {LL t;cin >> t;while (t--) {solve();}return 0;
}

賽后交流

在比賽結束后,會在交流群中給出比賽題解,同學們可以在賽后查看題解進行補題。

群號: 704572101,賽后大家可以一起交流做題思路,分享做題技巧,歡迎大家的加入。

在這里插入圖片描述

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

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

相關文章

PasteCode系列系統說明

定義 PasteCode系列是指項目是基于PasteTemplate構建的五層以上項目&#xff0c;包括不僅限于 Domain EntityFrameworkCore Application.Contracts Application HttpApi.Host 熟悉ABP vNext就很好理解了&#xff0c;因為PasteTemplate就是基于ABP的框架精簡而來&#xff01;在…

一些Mysql面試題

InnoDB是如何存儲數據的&#xff1f; InnoDB 的數據是按「數據頁」為單位來讀寫的&#xff0c;默認數據頁大小為 16 KB。每個數據頁之間通過雙向鏈表的形式組織起來&#xff0c;物理上不連續&#xff0c;但是邏輯上連續。 數據頁內包含用戶記錄&#xff0c;每個記錄之間用單向…

【java 如何將字符串反轉?】

文章目錄 概要示例&#xff08;1&#xff09;使用StringBuilder的reverse方法&#xff08;2&#xff09;使用charAt和循環&#xff08;3&#xff09;使用雙指針&#xff08;4&#xff09;使用遞歸 總結 概要 在Java中&#xff0c;有多種方法可以將字符串反轉&#xff0c;我這里…

代碼隨想錄訓練營第二天 977有序數組的平方 209長度最小的子數組 59螺旋矩陣II

第一題&#xff1a; 題目鏈接&#xff1a;977. 有序數組的平方 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 先將數組求完平方和后進行排序&#xff0c;很簡單&#xff0c;主要是排序算法的考察。 這里采用快排 快排的思路&#xff1a; 取這個數組的中間值…

代碼隨想錄算法訓練營第四十六 | ● 139.單詞拆分 ● 關于多重背包,你該了解這些! ● 背包問題總結篇!

139.單詞拆分 視頻講解&#xff1a;https://www.bilibili.com/video/BV1pd4y147Rh https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<st…

java stream流之groupby的用法

簡單分組 按照年齡對 Person 對象進行分組&#xff1a; 代碼示例 import java.util.*; import java.util.stream.Collectors;public class SimpleGrouping {public static void main(String[] args) {List<Person> people Arrays.asList(new Person("Alice"…

上市即交付,比亞迪秦L DM-i萬人交車暨千媒眾測開營

6月6日&#xff0c;“引領中級 開創油耗2時代”秦L DM-i萬人交車暨千媒眾測開營儀式在比亞迪大本營深圳盛大舉行。 眾多車主代表親臨現場&#xff0c;與全國各地的比亞迪4S店千店聯動&#xff0c;將秦L DM-i全國交付推向新的高潮。發布即量產&#xff0c;上市即交付&#xff0…

ESP32:FreeRTOS節拍配置(vTaskDelay延時10ms改為1ms)

文章目錄 背景方法手動修改sdkconfig通過idf.py menuconfig 背景 在FreeRTOS的默認配置中&#xff0c;任務調度的頻率默認是100HZ&#xff0c;因此默認vTaskDelay默認延時是10ms。 FreeRTOS 的系統時鐘節拍可以在配置文件 FreeRTOSConfig.h 里面設置&#xff1a;#define confi…

【HarmonyOS】鴻蒙應用子模塊module資源如何獲取

【HarmonyOS】鴻蒙應用子模塊module資源如何獲取 一、問題背景&#xff1a; 在多模塊項目工程中&#xff0c;單個模塊的資源不會放在主模塊中&#xff0c;所以我們需要在子模塊中訪問自己的資源。如果使用默認的資源獲取api&#xff0c;會提示找不到資源。 那如何獲取子模塊下…

【AI基礎】第四步:保姆喂飯級-langchain+chatglm2-6b+m3e-base

在第三步手動安裝chatglm2-6b時&#xff0c;已經可以通過web進行交互。langchain重新封裝了一下AI框架&#xff0c;提供更加友好的開發功能&#xff0c;類似于AI屆的spring框架。langchain的安裝過程也類似于上一步說的&#xff1a;【AI基礎】第三步&#xff1a;純天然手動安裝…

負載均衡

文章目錄 負載均衡的分類負載均衡的算法 負載均衡的分類 對鏈路的負載均衡 對鏈路的負載均衡主要是指應用方有多條ISP網絡出口,比方說電信網通,電信鐵通等,對鏈路的負載均衡也是解決目前電信網通互聯互通的最專業的技術.其實現的原理是根據負載均衡算法來算出,到目標地址的數據…

企業獲客有哪些好的廣告推廣拓客渠道?

在這個數字化營銷的時代&#xff0c;企業要想在激烈的市場競爭中脫穎而出&#xff0c;選擇正確的廣告宣傳渠道至關重要。隨著互聯網技術的飛速發展&#xff0c;各類媒體平臺如雨后春筍般涌現&#xff0c;為企業提供了廣闊的宣傳空間。云銜科技通過多元化的媒體渠道&#xff0c;…

485數據采集模塊

在工業自動化與智能化的浪潮中&#xff0c;數據采集作為整個系統的基礎和核心&#xff0c;其準確性和實時性直接關系到生產效率和產品質量。而485數據采集模塊&#xff0c;作為連接現場設備與上位機的重要橋梁&#xff0c;其性能與穩定性對于整個系統的運行至關重要。HiWoo Box…

【AIGC X UML 落地】通過多智能體實現自然語言繪制UML圖

前天寫了篇博文講到用PlantUML來繪制C類圖和流程圖。后臺有讀者留言&#xff0c;問這步能否自動化生成&#xff0c;不想學習 PlantUML 語法。 我想了下&#xff0c;發現這事可行&#xff0c;確實可以做到通過自然語言的描述就能實現 UML圖的繪制&#xff0c;昨天晚上加了個班到…

B站播放數量如何實現,高并發讀寫計數難點

我們先不考慮用戶規模、并發量、性能、可靠性… 這些東西 我們就單單從功能層面實現統計視頻播放量&#xff0c;其實很簡單&#xff0c; 就是給視頻表加一個字段&#xff0c;用來表示播放量 這樣實現&#xff0c;最大的好處就是簡單&#xff0c;但是我們馬上就能發現一個非常嚴…

Vue 組件之間的通信

在 Vue.js 中&#xff0c;組件是構建應用程序的基本單位。然而&#xff0c;當你的應用程序變得復雜時&#xff0c;組件之間的通信變得至關重要。本文將介紹幾種 Vue 組件之間通信的方式&#xff0c;幫助你更好地管理和組織代碼。 父子組件通信 父組件可以通過 props 向子組件傳…

離線下載安裝TTS的步驟

要離線下載安裝 TTS 模塊&#xff0c;需要先在有網絡的環境下下載所有所需的依賴項&#xff0c;然后將這些文件轉移到目標環境中進行安裝。以下是具體步驟&#xff1a; 步驟 1&#xff1a;在有網絡的環境下下載依賴項 創建一個目錄來存放下載的包&#xff1a; mkdir TTS_deps下…

在線標注流程

文章目錄 在線標注流程標注方法 在線標注流程 登錄地址&#xff1a;http://7a27c5e078f644a2a9b734603913c65e.login.bce.baidu.com 出現頁面&#xff1a; 登錄名&#xff1a; 三個中任意一個 密碼&#xff1a;ZNSJ123a 登錄之后叉掉。再打開這個網站&#xff1a;https://…

【ZYNQ】CPU 私有定時器

Zynq 的每個 Cortex-A9 處理器都有自己的專用 32 位定時器和 32 位看門狗定時器&#xff0c;兩個處理器共享一個全局 64 位定時器&#xff0c;這些計時器的時鐘頻率始終為 CPU 頻率的 1/2。本文主要介紹 Zynq 芯片 CPU 私有定時器的工作特性&#xff0c;以及私有定時器的基本使…

selenium中,如何使用選擇框

html5 一個多選下拉框&#xff0c;沒有默認選 一個單選下拉狂&#xff0c;默認“張桐桐” <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>選擇框</title> </head> <body><l…