【藍橋杯每日一題】3.17

Alt?

🏝?專欄:?【藍橋杯備篇】
🌅主頁:?f狐o貍x

他們說內存泄漏是bug,我說這是系統在逼我進化成SSR級程序員


? ? ? ? OK來吧,不多廢話,今天來點有難度的:二進制枚舉

? ? ? ? 二進制枚舉,就是如果題目中描述的情況只有兩種,就可以有 0 和 1 來表示,例如我們之前做過的掃雷游戲,每一個格子里面只有兩種情況,就是有雷和無雷,就可以有 0 和 1 來表示。這樣就可以使我們的枚舉大大提高效率

3.12 二進制枚舉

一、子集

? ? ? ? 題目鏈接:

? ? ? ? 78.子集

? ? ? ? 題目描述:

? ? ? ? 解題思路:

? ? ? ? 例如示例一的 [ 1, 2, 3 ],他的子集就是[ 1?],?[ 2 ],?[ 3 ],?[ 1, 2 ],?[ 1, 3 ],?[ 2, 3 ], [ 1, 2, 3 ],其實集合里面的每個元素都有兩種情況,出現和不出現,此時我們就可以用二進制來表示,如圖:

? ? ? ? 解題代碼:

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ret;int n = nums.size();for(int st = 0; st < (1 << n); st++){vector<int> tmp;for(int i = 0; i < n; i++){if((st >> i) & 1) tmp.push_back(nums[i]); }ret.push_back(tmp);}return ret;}
};

二、費解的開關

? ? ? ? 這題非常考驗我們的位運算的能力,如果看不懂的話可以私信煮波,煮波給你細細講解(主要是這里懶了)

? ? ? ? 題目鏈接:

????????P10449 費解的開關

? ? ? ? 題目描述:

? ? ? ? 解題思路:

? ? ? ? 對于每盞燈而言,只有亮與滅兩種情況,因此可以用二進制存儲關系,而且每排其實都是五個數字,因此我們可以將他每一排存的二進制變為一個十進制的數字來存儲,在通過位運算來改變每一盞燈的亮滅情況,即可破解此題

? ? ? ? 解題代碼:


#include <iostream>
#include <cstring>
using namespace std;const int N = 10;int a[N], t[N];int calc(int push)
{int cnt = 0;while (push){cnt++;push &= (push - 1);}return cnt;
}int main()
{int n; cin >> n;while (n--){// 清空上一組的數據memset(a, 0, sizeof a);// 輸入數據,每一排用十進制數字存儲二進制for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){char ch; cin >> ch;if (ch == '0') a[i] |= (1 << j);}}int ret = 0x3f3f3f3f;// 枚舉第一排的情況for (int st = 0; st < (1 << 5); st++){memcpy(t, a, sizeof a);int push = st;int cnt = 0; // 記錄按了幾次for (int i = 0; i < 5; i++){cnt += calc(push);t[i] = t[i] ^ push ^ (push << 1) ^ (push >> 1);t[i] &= (1 << 5) - 1; // 清除影響t[i + 1] ^= push; // 修改下一行的狀態push = t[i];}if (t[4] == 0) ret = min(ret, cnt);}if (ret > 6) cout << "-1" << endl;else cout << ret << endl;}return 0;
}

三、Even Parity

? ? ? ? 這題和上面那題“費解的開關”類似,就不多廢話了

? ? ? ? 題目鏈接:

???????UVA11464 Even Parity - 洛谷

? ? ? ? 題目描述:

? ? ? ? 解題思路:

? ? ? ? 一樣的都是利用二進制來存儲數據,再巧妙地運用位運算解決題目

? ? ? ? 解題代碼:

#include <iostream>
#include <cstring>
using namespace std;
const int N = 20;
int n;
int a[N]; // ??進制存儲狀態
int t[N]; // 備份// 判斷 x->y 是否合法
// 返回 -1,表?不合法
// 其余的數,表?合法,并且表? 0->1 的次數
int calc(int x, int y)
{int sum = 0; for (int i = 0; i < n; i++){if (((x >> i) & 1) == 0 && ((y >> i) & 1) == 1) sum++;if (((x >> i) & 1) == 1 && ((y >> i) & 1) == 0) return -1;}return sum;
}
int solve()
{int ret = 0x3f3f3f3f; // 記錄最?的改變次數// 枚舉第??的最終狀態for (int st = 0; st < (1 << n); st++){memcpy(t, a, sizeof a);int change = st;int cnt = 0; // 統計 0->1 的次數bool flag = 1;for (int i = 1; i <= n; i++){// 先判斷 change 是否合法int c = calc(t[i], change);if (c == -1){flag = 0;break;}cnt += c; // 累加次數// 當前?的最終狀態t[i] = change;// 計算下??的最終狀態change = t[i - 1] ^ (t[i] << 1) ^ (t[i] >> 1);change &= (1 << n) - 1;}if (flag) ret = min(ret, cnt);}if (ret == 0x3f3f3f3f) return -1;else return ret;
}int main()
{int T; cin >> T;for (int k = 1; k <= T; k++){// 多組測試數據,記得清空memset(a, 0, sizeof a);cin >> n;for (int i = 1; i <= n; i++) // 避免越界訪問{for (int j = 0; j < n; j++){int x; cin >> x;if (x) a[i] |= 1 << j;}}printf("Case %d: %d\n", k, solve());}return 0;
}

? ? ? ? 最后這兩個題有些難,各位稍安勿躁,刷小怪的時候偶爾遇到點BOSS也正常,明天我們來點有意思的算法,前綴和和差分

????????"賽場上鍵盤冒火星?這是系統在為我頒發'鋼鐵直男'勛章!"

“啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,爛命一條就是干啊,沖沖沖”

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

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

相關文章

Windows11 新機開荒(二)電腦優化設置

目錄 前言&#xff1a; 一、注冊微軟賬號綁定權益 二、此電腦 桌面圖標 三、系統分盤及默認存儲位置更改 3.1 系統分盤 3.2 默認存儲位置更改 四、精簡任務欄 總結&#xff1a; 前言&#xff1a; 本文承接上一篇 新機開荒&#xff08;一&#xff09; 上一篇文章地址&…

aws(學習筆記第三十三課) 深入使用cdk 練習aws athena

文章目錄 aws(學習筆記第三十三課) 深入使用cdk學習內容&#xff1a;1. 使用aws athena1.1 什么是aws athena1.2 什么是aws glue1.2 為什么aws athena和aws glue一起使用 2. 開始練習aws athena2.1 代碼鏈接2.2 整體架構2.3 代碼解析2.3.1 創建測試數據的S3 bucket2.3.2 創建保…

每日學習Java之一萬個為什么(待補充)

Git分支操作 git branch 分支名 git branch -v git checkout -b 分支名 git checkout 分支名 git merge 分支名 git branch -d | -D 分支名Git沖突 git同名文件合并的最基本單位是行。同名文件同一行不同就會發生沖突。 解決辦法&#xff1a;及時溝通&#xff0c;手動更改&…

C++ 多生產者單消費者(MPSC)模式

根據你的需求,多生產者單消費者(MPSC)模式的日志任務隊列需要調整設計。以下是改進后的代碼實現,重點在于多線程安全入隊、單線程消費任務,并確保停止時隊列任務全部處理完畢: 多生產者單消費者(MPSC)任務隊列實現 #include <iostream> #include <queue> …

OpenCV基礎【圖像和視頻的加載與顯示】

目錄 一.創建一個窗口&#xff0c;顯示圖片 二.顯示攝像頭/多媒體文件 三.把攝像頭錄取到的視頻存儲在本地 四.鼠標回調事件 五.TrackBar滑動條 一.創建一個窗口&#xff0c;顯示圖片 import cv2img_path "src/fengjing.jpg" # 自己的圖片路徑 img cv2.imre…

c++--vector

1.定義vector vector的定義分為四種 (1)vector() ——————無參構造 (2)vector(size_t n,const value_type& val value_type()) ——————構造并初始化n個val (3)vector(const vector& v1) ———————拷貝構造 (4)vector(inputiterator first,inpu…

宇樹科技純技能要求總結

一、嵌入式開發與硬件設計 核心技能 嵌入式開發&#xff1a; 精通C/C&#xff0c;熟悉STM32、ARM開發熟悉Linux BSP開發及驅動框架&#xff08;SPI/UART/USB/FLASH/Camera/GPS/LCD&#xff09;掌握主流平臺&#xff08;英偉達、全志、瑞芯微等&#xff09; 硬件設計&#xff1a…

「Unity3D」UGUI運行時設置元素的錨點Anchor,維持元素Rect的顯示不變,即待在原處

在編輯器中&#xff0c;通過設置Raw edit mode&#xff0c;可以切換兩種&#xff0c;元素錨點的改變模式&#xff1a; 一種是錨點單獨改變&#xff0c;即&#xff1a;不開啟原始模式&#xff0c;保持原樣&#xff0c;改變anchoredPosition與sizeDelta。一種是錨點聯動顯示&…

使用 Google Firebase 控制臺和 ESP8266 NodeMCU 的物聯網控制 LED

使用 Google Firebase 控制臺控制 LED ESP8266 您是否想過從世界任何地方控制任何外圍設備?是的,IoT(物聯網)使從任何地方控制任何設備成為可能,并且有許多 IoT 硬件和云平臺可用于實現這一目標。在前面的教程中,我們已經介紹了許多 IoT 應用程序。今天,我們將使用 Goo…

【數據庫】如何用索引優化查詢性能

引言 在數據庫查詢中&#xff0c;索引是提升性能的關鍵工具。合理使用索引可以顯著減少數據掃描量&#xff0c;加快查詢速度。然而&#xff0c;索引的使用也需要謹慎&#xff0c;錯誤的索引策略可能導致性能下降甚至系統崩潰。本文將深入探討如何通過索引優化查詢性能&#xf…

LeetCode 392. 判斷子序列 java題解

https://leetcode.cn/problems/is-subsequence/description/ 轉化為最長公共子序列問題。求[lens][j]的公共子序列長度是否為lens。 class Solution {//s屬于t,lens<lentpublic boolean isSubsequence(String s, String t) {int lenss.length(),lentt.length();if(s.length…

【Kubernetes】Kube Proxy 如何幫助 Pod 之間通信?Kube-Proxy 實踐案例

kube-proxy 主要通過管理網絡規則和流量轉發來幫助 Pod 之間進行通信&#xff0c;具體方式如下&#xff1a; 1. 維護 Service 相關的網絡規則 kube-proxy 監聽 API Server&#xff0c;當 Service 或 Endpoints 發生變化時&#xff0c;動態更新網絡規則。確保流量能正確地從 S…

平衡樹的模擬實現

一.平衡樹的介紹 平衡樹是以二叉樹結構為基礎&#xff0c;同時引入了平衡因子進行了限制&#xff0c;以保證樹的結點之間的高度差小于等于1&#xff0c;在插入刪除結點時通過旋轉的方法保持高度相對平衡&#xff0c;從而提高搜索等效率。 二.代碼實現 1.平衡樹結點 平衡樹結…

JavaScript基礎-獲取元素

在Web開發中&#xff0c;使用JavaScript動態地訪問和操作網頁上的元素是一項基本技能。通過獲取頁面上的特定元素&#xff0c;我們可以對其進行各種操作&#xff0c;比如修改內容、樣式或屬性等。本文將詳細介紹幾種獲取DOM元素的方法&#xff0c;并探討它們的特點及適用場景。…

為什么要用(:deep、::v-deep、>>>)樣式穿透

在 Vue.js 中&#xff0c;當你使用像 Element UI 這樣的 UI 庫時&#xff0c;它們的樣式通常是全局的&#xff0c;即使你在組件中使用了 scoped 樣式&#xff08;為什么要用scoped&#xff09;&#xff0c;仍然可能需要對這些全局樣式進行修改。 為了實現這一點&#xff0c;樣…

MySQL中的事務隔離級別有哪些

MySQL中的事務隔離級別 一、事務并發問題二、MySQL 事務隔離級別1. READ UNCOMMITTED&#xff08;讀未提交&#xff09;2. READ COMMITTED&#xff08;讀已提交&#xff09;3. REPEATABLE READ&#xff08;可重復讀&#xff09;&#xff08;MySQL 默認級別&#xff09;4. SERIA…

Python----計算機視覺處理(Opencv:圖像鏡像旋轉)

一、圖像鏡像旋轉 圖像的旋轉是圍繞一個特定點進行的&#xff0c;而圖像的鏡像旋轉則是圍繞坐標軸進行的。圖像鏡像旋轉&#xff0c;也可 以叫做圖像翻轉&#xff0c;分為水平翻轉、垂直翻轉、水平垂直翻轉三種。 通俗的理解為&#xff0c;當以圖片的中垂線為x軸和y軸時&#x…

hibernate 自動生成數據庫表和java類 字段順序不一致 這導致添加數據庫數據時 異常

hibernate 自動生成的數據庫表和java類 字段順序不一致 這導致該書寫方式添加數據庫數據時 異常 User user new User( null, username, email, phone, passwordEncoder.encode(password) ); return userRepository.save(user);Hibernate 默認不會保證數據庫表字段的順序與 Ja…

python|結構的模式匹配match|同步迭代

在 Python 中&#xff0c;模式匹配&#xff08;Pattern Matching&#xff09; 是一種強大的功能&#xff0c;用于根據數據的結構或內容進行匹配和處理。Python 3.10 引入了 match 語句&#xff0c;使得模式匹配更加直觀和靈活。模式匹配可以用于處理復雜的數據結構&#xff0c;…

博客圖床 VsCode + PigGo + 阿里云OSS

關鍵字 寫博客&#xff0c;圖床&#xff0c;VsCode&#xff0c;PigGo&#xff0c;阿里云OSS 背景環境 我想把我在本地寫的markdown文檔直接搬到CSDN上和博客園上&#xff0c;但是圖片上傳遇到了問題。我需要手動到不同平臺上傳文件&#xff0c;非常耗費時間和經歷。 為了解決…