牛客網50題-10

1.小苯的數字權值

在這里插入圖片描述

#include <iostream>
#include <algorithm>
using namespace std;const int max_n = 2000000;
int d[max_n + 1];
int f[max_n + 1];int main() {for(int i =1; i<=max_n;i++){for(int j = i; j<=max_n;j+=i){d[j]++;}}for(int i=1; i<=max_n;i++){f[i] = d[i];}for(int i = 2; i <= max_n; i++){for(int j = 2; j <= max_n / i; j++){int k = i * j;if(f[i] + f[j] > f[k]){f[k] = f[i] + f[j];}}}int T;scanf("%d", &T);while(T--){int x;scanf("%d", &x);printf("%d\n", f[x]);}return 0;}
2.小紅的子序逆序列

在這里插入圖片描述

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;const int MOD = 1e9 +7;class FenwickTree{
private:vector<int> tree;int size;public:FenwickTree(int n) : size(n), tree(n+1,0){}void update(int idx, int delta) {while(idx <= size){tree[idx] += delta;idx += idx & -idx;}}int query(int idx){int res = 0;while(idx > 0){res += tree[idx];idx -= idx & -idx;}return res;}
};int main(){int n;cin >> n;vector<int> a(n);for(int i=0;i<n;++i){cin >> a[i];}vector<int> temp = a;sort(temp.begin(), temp.end());temp.erase(unique(temp.begin(), temp.end()), temp.end());for(int i = 0; i<n;i++){a[i] = lower_bound(temp.begin(), temp.end(), a[i]) - temp.begin() + 1;}FenwickTree ft(temp.size());long long inv_count = 0;for(int i = n-1; i>=0;--i){inv_count += ft.query(a[i] - 1);ft.update(a[i], 1);}long long power = 1;for(int i =0; i < n-2; ++i){power = (power * 2)%MOD;}long long total = (inv_count % MOD) * (power % MOD) % MOD;cout << total << endl;return 0;
}// 64 位輸出請用 printf("%lld")
3.小美的彩帶

在這里插入圖片描述

#include <iostream>
#include<bits/stdc++.h>
using namespace std;#define all(x) x.begin(), x.end() //
int n, q ,len, m, blo;char op;
int length;
int lisan[20005];
int a[400005], ans[200005];
int mp[200005], siz;
// 64 位輸出請用 printf("%lld")struct stuct{int l, r, idx;bool operator< (const stuct& x) const{if(l/blo != x.l / blo) return l < x.l;return ( l / blo ) & 1 ? r > x.r : r < x.r;}} b[200005];int get(int v){return lower_bound(lisan +1, lisan +1 +m, v) - lisan;
}int main(){scanf("%d %d", &n, &q);for(int i=1; i<=n;++i){scanf("%d", &a[i]);lisan[i] = a[i];}sort(lisan +1, lisan + 1+ n);m = unique(lisan + 1, lisan + 1 + n) - lisan;--m;blo = sqrt( 2* n) * 1.5;for(int i = 1; i <= n; ++i){a[i] = get(a[i]);a[i+n] = a[i];}scanf("\n");int l = 1, r = 2*n, len = 0;for(int i = 1; i<=q;++i){scanf("%c %d\n", &op, &length);if(length >= n){ans[i] = m;length %= n;if(op =='L'){l += length;if(l>n) {l -= n;}}else{r -= length;if( r<= n) r+=n;}continue;}if(op =='L'){++len;b[len].l = l, b[len].r = l + length -1, b[len].idx = i;l+=length;if(l > n) l -= n;}else{++len;b[len].l = r - length + 1, b[len].r = r, b[len].idx = i;r -= length;if(r <= n) r += n;}}sort(b+1, b+1+len);l = 0, r = 0;for(int i = 1; i <= len; ++i){while( r < b[i].r){++r;if(mp[a[r]]==0) siz++;mp[a[r]]++;}while( r > b[i].r){mp[a[r]]--;if(mp[a[r]]==0)siz--;--r;}while( l < b[i].l){mp[a[l]]--;if(mp[a[l]] == 0) --siz;++l;}while( l > b[i].l){--l;if(mp[a[l]] == 0) ++siz;mp[a[l]]++;}ans[b[i].idx] = siz;}for(int  i = 1; i<= q; ++i) printf("%d\n", ans[i]);return 0;
}
4.小美和大富翁

在這里插入圖片描述

5.數組刪除

在這里插入圖片描述

#include <iostream>
#include <cstring>
#include <vector>
#include <string>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <cmath>
#include <queue>
#include <iomanip>
#include <algorithm>using namespace std;// 64 位輸出請用 printf("%lld")unordered_map<long long, long long> hashMap;long long a[20005];void solve() {hashMap.clear();long long n, k, x;cin >> n >> k >> x;for(long long i = 1; i <= n; i++){cin >> a[i];hashMap[a[i]]++;}long long minMiss = 0;while(true){auto it  = hashMap.find(minMiss);if(it == hashMap.end()){break;}minMiss++;}long long result = k * minMiss; for(long long i = 1; i <= n; i++){long long start =0;long long mex = -1;auto target = hashMap.find(a[i]);if(target -> second >= 2){hashMap[a[i]]--;}else{hashMap.erase(a[i]);}while(true){auto it = hashMap.find(start);if(it == hashMap.end()){mex = start;break;}start++;}result = min(result, i*x+k*mex);}cout << result << endl;
}int main() {std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);long long T = 1;cin >> T;while(T--){solve();}return 0;
}
6.數字刪除

在這里插入圖片描述
在這里插入圖片描述

#include <string>
#include <iostream>
using namespace std;bool isValid(const string & s){if(s.empty() || s == "0") return false;int sum =0;for(char c:s) sum += c - '0';return sum % 3==0;
}int maxDelete(string s){int cnt =0;while(s.length() > 1){bool found = false;for(int i = 0; i< s.length(); i++){string t = s.substr(0,i) + s.substr(i+1);if(isValid(t)){s = t;cnt++;found = true;break;}}if(!found) break;}return cnt;
}int main(){int T;cin >> T;while(T--){string s;cin >> s;cout << maxDelete(s) << endl;}return 0;
}
// 64 位輸出請用 printf("%lld")
7.小紅的數字串

在這里插入圖片描述

#include <iostream>              // 引入輸入輸出流頭文件
#include <string>                // 引入字符串處理頭文件
using namespace std;int main() {string s;                    // 存儲輸入的數字串long long k;                 // 存儲輸入的正整數kcin >> s >> k;               // 讀取輸入int n = s.size();            // 獲取數字串長度long long ans = 0;           // 記錄滿足條件的子串數量int left = 0;                // 預留變量,實際未使用long long num = 0;           // 用于存儲當前子串轉換成的數字// 枚舉每個子串的右端點for (int right = 0; right < n; ++right) {num = 0;                 // 每次外層循環重置num// 枚舉以right為結尾的所有子串,長度最多為10(因為k最大為1e9,超過10位一定不小于k)for (int l = right; l >= 0 && right - l + 1 <= 10; --l) {num = stoll(s.substr(l, right - l + 1)); // 將子串轉換為數字if (num < k) ans++;   // 如果小于k,計數加一else break;           // 如果不小于k,提前結束內層循環}}cout << ans << endl;          // 輸出滿足條件的子串數量return 0;                     // 程序結束
}
8.小紅的0 1串

在這里插入圖片描述

/*
每遇到一個"010"或"101"子串,只需修改其中任意一個字符即可消除該子串。
為避免重疊,每次修改后跳過這3個字符。
時間復雜度O(n)。
*/
#include <iostream>              // 引入輸入輸出流頭文件
#include <string>                // 引入字符串處理頭文件
using namespace std;// 功能:將01串變為不含"010"和"101"子串的“好串”,返回最小操作次數
int main() {string s;                    // 定義字符串s,存儲輸入的01串cin >> s;                    // 讀取輸入的01串int n = s.size();            // 獲取字符串長度int ans = 0;                 // 記錄最小操作次數// 遍歷字符串,檢查每個長度為3的子串for (int i = 0; i <= n - 3; ) {// 如果當前位置出現"010"或"101"子串if ((s[i] == '0' && s[i + 1] == '1' && s[i + 2] == '0') ||(s[i] == '1' && s[i + 1] == '0' && s[i + 2] == '1')) {ans++;      // 需要進行一次操作(取反其中任意一個字符即可消除該子串)i += 3;     // 跳過這3個字符,防止重疊子串被重復計數} else {i++;        // 如果不是"010"或"101",則繼續檢查下一個位置}}cout << ans << endl;         // 輸出最小操作次數return 0;                    // 程序結束
}
9. 小紅的爆炸串2

在這里插入圖片描述

/**
代碼解釋1.??初始化??:讀入字符串長度 n、閾值 k 和字符串 s。2.??滑動窗口??:??右指針 j??:遍歷字符串的每個位置。??更新相鄰對數??:若 s[j?1] 和 s[j] 不同,則 cur_sum 加 1。??調整左指針??:當 cur_sum >= k 時,向右移動左指針 i,并減少離開窗口的字符對的貢獻。?3.?計數??:對每個 j,滿足條件的子串數量為 j?i+1,累加到答案 ans。?4.?輸出結果??:打印所有不會爆炸的子串總數。*/#include <iostream>              // 引入輸入輸出流頭文件
#include <string>                // 引入字符串處理頭文件
using namespace std;int main() {ios::sync_with_stdio(false); // 關閉C++和C的流同步,加快輸入輸出速度cin.tie(0);                  // 解除cin和cout的綁定,加快輸入輸出int n, k;                    // n為字符串長度,k為爆炸的最小相鄰不同對數string s;                    // 存儲輸入字符串cin >> n >> k;               // 讀取n和kcin >> s;                    // 讀取字符串long long ans = 0;           // 記錄不會爆炸的子串數量int i = 0;                   // 滑動窗口左端指針int cur_sum = 0;             // 當前窗口內相鄰不同對數// 枚舉右端點j,滑動窗口for (int j = 0; j < n; j++) {if (j >= 1) {            // 不是第一個字符時if (s[j-1] != s[j]) {cur_sum++;       // 如果當前字符和前一個字符不同,cur_sum加一}}// 如果窗口內不同對數達到k,移動左指針i縮小窗口while (i < j && cur_sum >= k) {if (s[i] != s[i+1]) {cur_sum--;       // 移動i時,如果i和i+1不同,cur_sum減一}i++;                 // 左指針右移}ans += (j - i + 1);      // 以j結尾的不爆炸子串數量累加到ans}cout << ans << endl;         // 輸出不會爆炸的子串數量return 0;                    // 程序結束
}
10. 小紅的拼圖

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

#include <iostream>                  // 引入輸入輸出流頭文件
#include <vector>                    // 引入vector容器頭文件
using namespace std;int main() {int t;                           // t為測試用例組數cin >> t;while (t--) {                    // 處理每組測試用例int n, m;                    // n為行數,m為列數cin >> n >> m;vector<string> grid(n);      // 存儲拼圖網格for (int i = 0; i < n; i++) {cin >> grid[i];          // 讀取每一行}bool found = false;          // 標記是否存在合法拼接方案// 枚舉W形狀的四條邊(上右下左)是凸(1)還是凹(0)for (int t0 = 0; t0 <= 1; t0++) {for (int r0 = 0; r0 <= 1; r0++) {for (int b0 = 0; b0 <= 1; b0++) {for (int l0 = 0; l0 <= 1; l0++) {// edges[i][j][k]表示(i,j)格子第k條邊(0上1右2下3左)是凸(1)還是凹(0)vector<vector<vector<int>>> edges(n, vector<vector<int>>(m, vector<int>(4, -1)));bool valid = true; // 標記當前枚舉的邊形態是否有效// 根據每個格子的旋轉形態,確定其四條邊的凸凹情況for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] == '*') continue; // 空格子跳過char c = grid[i][j];if (c == 'W') {edges[i][j] = {t0, r0, b0, l0}; // W: 上右下左} else if (c == 'D') {edges[i][j] = {l0, t0, r0, b0}; // D: 旋轉90度} else if (c == 'S') {edges[i][j] = {b0, l0, t0, r0}; // S: 旋轉180度} else if (c == 'A') {edges[i][j] = {r0, b0, l0, t0}; // A: 旋轉270度}}}// 檢查所有相鄰格子的邊是否契合for (int i = 0; i < n && valid; i++) {for (int j = 0; j < m && valid; j++) {if (grid[i][j] == '*') continue; // 空格子跳過// 檢查右鄰格子if (j + 1 < m && grid[i][j + 1] != '*') {// 當前格右邊和右鄰格左邊之和必須為1(一個凸一個凹)if (edges[i][j][1] + edges[i][j + 1][3] != 1) {valid = false;}}// 檢查下鄰格子if (i + 1 < n && grid[i + 1][j] != '*') {// 當前格下邊和下鄰格上邊之和必須為1if (edges[i][j][2] + edges[i + 1][j][0] != 1) {valid = false;}}}}// 如果當前枚舉的邊形態有效,說明存在合法拼接方案if (valid) {found = true;goto next; // 跳出所有循環,進入輸出}}}}}next:if (found) {cout << "Yes" << endl;   // 存在合法方案} else {cout << "No" << endl;    // 不存在合法方案}}return 0;
}
11.小紅的奇偶抽取

在這里插入圖片描述

/**
該程序將輸入的正整數的每一位數字,按奇偶性分別拼接成兩個新數,然后輸出這兩個數的差的絕對值。
例如輸入302938,奇數拼接為393,偶數拼接為28,輸出|393-28|=365。
*/
#include <iostream>              // 引入輸入輸出流頭文件
#include <string>                // 引入字符串處理頭文件
using namespace std;int main() {string s;                    // 定義字符串s,用于存儲輸入的數字cin >> s;                    // 讀取輸入的數字串long long odd_num = 0;       // 用于存儲奇數位拼接成的數long long even_num = 0;      // 用于存儲偶數位拼接成的數// 遍歷輸入字符串的每個字符for (char c : s) {int digit = c - '0';     // 將字符轉換為對應的數字if (digit % 2 == 1) {    // 如果是奇數odd_num = odd_num * 10 + digit;   // 拼接到奇數數值后面} else {                 // 如果是偶數even_num = even_num * 10 + digit; // 拼接到偶數數值后面}}long long diff = odd_num - even_num; // 計算奇數數和偶數數的差if (diff < 0) {                      // 如果差為負數diff = -diff;                    // 取絕對值}cout << diff << endl;                // 輸出最終結果return 0;                            // 程序結束
}

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

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

相關文章

基于springboot的大學公文收發管理系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業多年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了多年的畢業設計程序開發&#xff0c;開發過上千套畢業設計程序&#xff0c;沒有什么華麗的語言&#xff0…

【機器學習】反向傳播如何求梯度(公式推導)

寫在前面 前期學習深度學習的時候&#xff0c;很多概念都是一筆帶過&#xff0c;只是覺得它在一定程度上解釋得通就行&#xff0c;但是在強化學習的過程中突然意識到&#xff0c;反向傳播求梯度其實并不是一件簡單的事情&#xff0c;這篇博客的目的就是要講清楚反向傳播是如何對…

ALB、NLB、CLB 負載均衡深度剖析

ALB、NLB、CLB 負載均衡深度剖析 前言 筆者在上周的實際工作中遇到了一個典型的負載均衡選擇問題&#xff1a;在使用代理調用相關模型時&#xff0c;最初配置 Nginx 的代理地址為 ALB 的 7 層虛擬 IP&#xff08;VIP&#xff09;&#xff0c;但由于集團網絡默認的超時時間為 3 …

歷史數據分析——云南白藥

醫藥板塊走勢分析: 從月線級別來看 2008年11月到2021年2月,月線上走出了兩個震蕩中樞的月線級別2085-20349的上漲段; 2021年2月到2024年9月,月線上走出了20349-6702的下跌段; 目前月線級別放巨量,總體還在震蕩區間內,后續還有震蕩和上漲的概率。 從周線級別來看 從…

【讀書筆記】《Effective Modern C++》第3章 Moving to Modern C++

《Effective Modern C》第3章 Moving to Modern C 一、區分圓括號 () 與大括號 {} &#xff08;Item?7&#xff09; C11 引入統一初始化&#xff08;brace?initialization&#xff09;&#xff0c;即使用 {} 來初始化對象&#xff0c;與傳統的 () 存在細微差別&#xff1a;避…

Rust基礎-part1

Rust基礎[part1]—安裝和編譯 安裝 ? rust curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安裝成功 [外鏈圖片轉存中…(img-ClSHJ4Op-1752058241580)] 驗證 ? rust rustc --version zsh: command not found: rustc因為我是用的是zsh&#xff0c;所以zsh配置…

PyQt5布局管理(QGridLayout(網格布局))

QGridLayout&#xff08;網格布局&#xff09; QGridLayout&#xff08;網格布局&#xff09;是將窗口分隔成行和列的網格來進行排列。通常可以使用函數addWidget()將被管理的控件&#xff08;Widget)添加到窗口中&#xff0c;或者使用addLayout() 函數將布局&#xff08;Layou…

Java設計模式之行為型模式(責任鏈模式)介紹與說明

一、核心概念與定義 責任鏈模式是一種行為型設計模式&#xff0c;其核心思想是將請求沿著處理對象鏈傳遞&#xff0c;直到某個對象能夠處理該請求為止。通過這種方式&#xff0c;解耦了請求的發送者與接收者&#xff0c;使多個對象有機會處理同一請求。 關鍵特點&#xff1a; 動…

SQL server之版本的初認知

SQL server之版本的初認知 為什么要編寫此篇文檔呢&#xff0c;主要是因為在最近測試OGG實時同步SQL server數據庫表數據的時候&#xff0c;經過多次測試&#xff0c;發現在安裝了一套SQL server2017初始版本&#xff0c;未安裝任何補丁的時候&#xff0c;在添加TRANDATA的時候…

【前端】jQuery動態加載CSS方法總結

在jQuery 中動態加載 CSS 文件有多種方法&#xff0c;以下是幾種常用實現方式&#xff1a; 方法 1&#xff1a;創建 <link> 標簽&#xff08;推薦&#xff09; // 動態加載外部 CSS 文件 function loadCSS(url) {$(<link>, {rel: stylesheet,type: text/css,href:…

Python爬蟲實戰:研究xlwings庫相關技術

1. 引言 在金融科技快速發展的背景下,數據驅動決策已成為投資領域的核心競爭力。金融市場數據具有海量、多源、實時性強等特點,傳統人工收集與分析方式難以滿足高效決策需求。Python 憑借其豐富的開源庫生態,成為金融數據分析的首選語言。結合 Requests、BeautifulSoup 等爬…

Linux 內核日志中常見錯誤

目錄 **1. `Oops`****含義****典型日志****可能原因****處理建議****2. `panic`****含義****典型日志****可能原因****處理建議****3. `BUG`****含義****典型日志****可能原因****處理建議****4. `kernel NULL pointer`****含義****典型日志****可能原因****處理建議****5. `WA…

Linux驅動開發2:字符設備驅動

Linux驅動開發2&#xff1a;字符設備驅動 字符設備驅動開發流程 字符設備是 Linux 驅動中最基本的一類設備驅動&#xff0c;字符設備就是一個一個字節&#xff0c;按照字節流進行讀寫操作的設備&#xff0c;讀寫數據是分先后順序的。比如最常見的點燈、按鍵、 IIC、 SPI&#x…

RuoYi-Cloud 驗證碼處理流程

以該處理流程去拓展其他功能模塊處理流程&#xff0c;進而熟悉項目開發代碼一、思路JavaWeb流程主干線&#xff1a;發起請求、處理請求、響應請求二、登錄頁面在登錄頁面按鍵F12打開開發者工具&#xff0c;點擊network&#xff0c;刷新頁面&#xff0c;點擊code&#xff0c;查看…

云計算三大服務模式深度解析:IaaS、PaaS、SaaS

架構本質&#xff1a;云計算服務模式定義了資源抽象層級和責任分擔邊界&#xff0c;形成從基礎設施到應用的全棧服務金字塔。三種模式共同構成云計算的服務交付模型核心框架。一、服務模式全景圖 #mermaid-svg-f0Klw2fbuhBQqJTh {font-family:"trebuchet ms",verdana…

【sql學習之拉鏈表】

1.拉鏈表理解 記錄歷史。記錄一個事物從開始&#xff0c;一直到當前狀態的所有變化的信息。字段說明&#xff1a; start_dt&#xff1a;該條記錄的生命周期開始時間 end_dt&#xff1a;該條記錄的生命周期結束時間 end_dt’9999/12/31’表示該條記錄目前處于有效狀態 如果查詢當…

STM32中實現shell控制臺(shell窗口輸入實現)

文章目錄 一、總體結構二、串口接收機制三、命令輸入與處理邏輯四、命令編輯與顯示五、歷史命令管理六、命令執行七、初始化與使用八、小結在嵌入式系統開發中,使用串口Shell控制臺是一種非常常見且高效的調試方式。本文將基于STM32平臺,分析一個簡潔但功能完整的Shell控制臺…

區分三種IO模型和select/poll/epoll

部分內容來源&#xff1a;JavaGuide select/poll/epoll 和 三種IO模型之間的關系是什么&#xff1f;區分普通IO和IO多路復用普通IO&#xff0c;即一個線程對應一個連接&#xff0c;因為每個線程只處理一個客戶端 socket&#xff0c;目標明確&#xff1a;線程中直接操作該 socke…

Actor-Critic重要性采樣原理

目錄 AC的數據低效性&#xff1a; 根本原因&#xff1a;策略更新導致數據失效 應用場景&#xff1a; 1. 離策略值函數估計 2. 離策略策略優化 3. 經驗回放&#xff08;Experience Replay&#xff09; 4. 策略梯度方法 具體場景分析 場景1&#xff1a;連續策略更新 場…

【贈書福利,回饋公號讀者】《智慧城市與智能網聯汽車,融合創新發展之路》

「5G行業應用」公號作家團隊推出《智慧城市與智能網聯汽車&#xff0c;融合創新發展之路》。本書由機械工業出版社出版&#xff0c;探討如何通過車城融合和創新應用&#xff0c;促進汽車產業轉型升級與生態集群發展&#xff0c;提升智慧城市精準治理與出行服務效能。&#xff0…