每日一題——博弈論(枚舉與暴力)

博弈論

題目描述

運行代碼

#include<iostream>
#include<vector>
using namespace std;
int main(){int n;cin >> n;vector<int> d(n,0);for(int i = 0;i < n;i++){cin >> d[i];}vector<int> in(1000,0);for(int k = 1;k<=3;k++){for(int i=0;i<=n-k;i++){int t = 0;for(int j=i;j<i+k;j++){t = 10*t+d[j];}in[t] = 1;}}for(int i = 0;i < 1000;i++)if(in[i] == 0){cout << i << endl;return 0;}return 0;
}

代碼思路

  1. 輸入處理:

    • 首先,程序接收一個整數n,表示數字序列的長度。
    • 然后,程序讀取接下來的n個整數并存儲在一個名為dvector(動態數組)中。
  2. 初始化標記數組:創建一個大小為1000的vector?in,并將其所有元素初始化為0。這個數組用來標記長度為1至3位的整數是否在給定序列中出現過。由于最大的3位數是999,因此1000的大小足夠覆蓋所有可能的情況。

  3. 檢查數字序列:對于長度為1、2、3的子序列,程序遍歷所有可能的起始位置i:計算從位置i開始,長度為k(當前循環的長度)的子序列對應的整數t。這是通過將子序列中的每個數字乘以相應位值(10的冪)并求和得到的。將計算出的整數tin數組中標記為1,表示這個數值已經在輸入序列中出現過了。

  4. 尋找未出現的最小整數:

    • 遍歷in數組,找到第一個值為0的元素的索引,這代表了未在輸入序列中出現過的最小正整數。
    • 一旦找到這樣的索引,立即輸出該索引(即對應的整數),并結束程序。
  5. 返回:如果遍歷完整個in數組都沒有找到未出現的整數(理論上這種情況不應該發生,但代碼邏輯沒有直接處理這種特殊情況),程序會正常結束。

改進思路

  1. 減少內存使用:目前使用了一個大小為1000的vector來標記數字是否出現,其實最大只需要到n的長度變化的所有組合即可,特別是當n遠小于3時。可以通過動態調整in的大小或者使用更高效的數據結構如setunordered_set來改進。

  2. 優化尋找未出現數字的步驟:當前實現是線性查找in數組中值為0的第一個元素,若大多數數字都已出現,則效率較低。可以在遍歷過程中直接記錄第一個未出現的數字,減少后續查找步驟。

  3. 增加對極端情況的處理:例如,當輸入序列為空或全為0時,原始代碼可能表現得不夠直觀或正確。

改進代碼

#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;int main() {int n;cin >> n;vector<int> d(n, 0);// 輸入數字序列for (int i = 0; i < n; ++i) {cin >> d[i];}// 使用unordered_set存儲已出現的數字,自動去重且查找效率高unordered_set<int> appeared;// 檢查數字序列,添加長度為1到3的數字到集合中for (int k = 1; k <= min(3, n); ++k) { // 添加邊界條件避免n<k時的無效迭代for (int i = 0; i <= n - k; ++i) {int t = 0;for (int j = i; j < i + k; ++j) {t = 10 * t + d[j];}appeared.insert(t);}}// 尋找未出現的最小正整數int i = 1;while (appeared.find(i) != appeared.end()) {++i;}cout << i << endl;return 0;
}
  1. 通過使用unordered_set來存儲已出現的數字,提高了查找未出現數字的效率。
  2. 通過直接在遍歷過程中尋找未出現的最小整數,避免了最后單獨的查找循環,使得代碼更加簡潔。
  3. 增加了對輸入序列長度的邊界檢查,確保了代碼的健壯性。
注意點:

改進代碼為AI生成,并且這個代碼的數據通過率97%,無法通過所有測試數據

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

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

相關文章

ESP32燒錄AT固件并進行MQTT通訊

首先下載AT固件 發布的固件 - ESP32 - — ESP-AT 用戶指南 latest 文檔 下載燒錄工具 下載指導 - ESP32 - — ESP-AT 用戶指南 latest 文檔 燒錄后注意usb的串口是不能發AT指令的 需要用16和17腳 用AT指令確認OK后連WIFI ATCWMODE1 //設置客戶端模式 ATCWLAP …

mysql誤刪后使用binlog恢復數據

1 預期效果 使用 binlog 恢復數據的預期效果是將誤刪的數據還原到誤刪之前的狀態&#xff0c;以減少或消除數據丟失的影響。通過正確解析和執行 binlog 中的操作記錄&#xff0c;可以重新執行誤刪操作之后的插入、更新或刪除操作&#xff0c;從而恢復被誤刪的數據。 數據恢復&…

Cocos Creator 編輯器的數據綁定詳解

Cocos Creator 是一款由 Cocos 平臺推出的游戲開發工具&#xff0c;它集成了圖形化編輯器、腳本引擎和資源管理器等功能&#xff0c;方便開發者快速地創建游戲。其中&#xff0c;數據綁定是 Cocos Creator 編輯器中非常重要的一個功能&#xff0c;它可以幫助開發者實現頁面元素…

三生隨記——山洞之謎

第一章&#xff1a;初識山洞 在遠離人煙的深山之中&#xff0c;隱藏著一個鮮為人知的山洞。這個山洞名叫幽洞&#xff0c;它的名字在當地人的口中帶著一股說不出的詭異和神秘。據說&#xff0c;幽洞深不見底&#xff0c;里面充滿了未知的恐懼和危險。然而&#xff0c;對于好奇心…

Go微服務: Grpc服務注冊在Consul的示例(非Go-Micro)

概述 現在&#xff0c;我們使用consul客戶端的api來把GRPC服務實現注冊到consul上&#xff0c;非Go-Micro的形式其實&#xff0c;consul官方提供了對應的接口調用來實現&#xff0c;golang中的consul/api包對其進行了封裝我們使用consul/api來進行展示 目錄結構 gitee.com/g…

springboot+mysql在線考試系統-計算機畢業設計源碼82584

摘 要 信息化社會內需要與之針對性的信息獲取途徑&#xff0c;但是途徑的擴展基本上為人們所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人們經常能夠獲得不同類型信息&#xff0c;這也是技術最為難以攻克的課題。針對在線考試等問題&#xff0c;對如何通過計算…

Websocket助手

功能介紹 WS助手是WebSocket調試的開發工具&#xff0c;該客戶端工具可以幫助開發人員快速連接到測試/生產環境&#xff0c;它可以幫助您監視和分析 Websocket 消息&#xff0c;并在開發過程中解決問題&#xff1b;可以模擬客戶端實現與服務器的數據交互&#xff0c;并完成批量…

論文精讀:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微軟亞洲研究院&#xff08;Microsoft Research Asia&#xff09;, 浙江…

uniapp 對接 微信App/支付寶App 支付

相關文檔&#xff1a;uni.requestPayment(OBJECT) | uni-app官網 示例代碼&#xff1a; import qs from qsasync aliPay(){const { provider } await uni.getProvider({ service:payment })if(provider.includes(alipay)){uni.request({url:后端接口地址,data:{ //傳參 },suc…

? 傳知代碼 ? 基于擴散模型的無載體圖像隱寫術

&#x1f49b;前情提要&#x1f49b; 本文是傳知代碼平臺中的相關前沿知識與技術的分享~ 接下來我們即將進入一個全新的空間&#xff0c;對技術有一個全新的視角~ 本文所涉及所有資源均在傳知代碼平臺可獲取 以下的內容一定會讓你對AI 賦能時代有一個顛覆性的認識哦&#x…

前端---閉包【防抖以及節流】----面試高頻!

1.什么閉包 釋放閉包 從以上看出&#xff1a;一般函數調用一次會把內部的數據進行清除--但是這種操作卻可以一起保留局部作用域的數據 // 優點:1、可以讀取函數內部的變量 2、讓這些變量始中存在局部作用域當中 2.閉包產生的兩種業務場景&#xff1a;防抖、節流 2.1防抖 舉…

QGraphicsView實現簡易地圖16『爆炸效果』

前文鏈接&#xff1a;QGraphicsView實現簡易地圖15『測量面積』 一種簡單的爆炸波擴散效果 動態演示效果&#xff1a; 靜態展示圖片&#xff1a; 核心代碼&#xff1a; #pragma once #include "../AbstractGeoItem.h" #include "DataStruct/GeoData.h"…

sysbench壓測mysql性能測試命令和報告

sysbench壓測mysql性能測試命令和報告 一、安裝sysbench工具二、創建測試數據庫三、基于sysbench構造測試表和測試數據四、數據庫性能測試1、數據庫讀寫性能測試2、數據庫讀性能測試3、數據庫刪除性能測試4、數據庫更新索引字段性能測5、數據庫更新非索引字段性能測試6、數據庫…

windows ip助手函數了解

根據手冊,winsock編程中提供的有一類函數叫ip助手函數;比如Ipconfig函數,從名字看應該是可自己編程實現類似ipconfig命令的功能; 剛看到一個示例,是MS提供的,也屬于這一類,代碼如下, #include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi…

C++ vector類

目錄 0.前言 1.vector介紹 2.vector使用 2.1 構造函數(Constructor) 2.1.1. 默認構造函數 (Default Constructor) 2.1.2 填充構造函數 (Fill Constructor) 2.1.3 范圍構造函數 (Range Constructor) 2.1.4 拷貝構造函數 (Copy Constructor) 2.2 迭代器(Iterator) 2.2.…

十、通配符和正則表達式

10.1 通配符 通配符是由shell處理的, 它只會出現在 命令的“參數”里。當shell在“參數”中遇到了通配符 時&#xff0c;shell會將其當作路徑或文件名去在磁盤上搜尋可能的匹配&#xff1a;若符合要求的匹配存在&#xff0c;則進 行代換(路徑擴展)&#xff1b;否則就將該通配…

python安裝依賴

創建 requirement.txt 文件并填充內容 flask2.0.0 pandas1.3.3 numpy1.21.2 安裝模塊 pip install -r requirement.txt

Spring boot使用集群方式、支持ssl連接redis的方法

1、需求背景 項目需要提供一個管理界面給內部人員操作用戶信息&#xff0c;需要在修改用戶信息后刪除用戶的redis緩存。用戶所在的區域不同&#xff0c;其redis服務地址也不相同&#xff0c;因此需要管理多個redis連接&#xff0c;且redis要求以集群方式并支持ssl進行連接。 2…

Qt for android 獲取USB設備列表(一)Java方式 獲取

簡介 QtActivity 作為 Qt 應用程序的入口點&#xff0c;負責啟動和配置 Qt 應用程序的信息&#xff0c; 后面我們繼承 QtActivity 做自定義控制&#xff0c;了解一下 Activity 生命周期概念&#xff0c; 因為 QtActivity 繼承自Android的activity&#xff0c;使用周期函數完成我…

java8新特性——函數式編程詳解

目錄 一 概述1.1 背景1.2 函數式編程的意義1.3 函數式編程的發展 Lambda表達式1.1 介紹1.2 使用Lambda的好處1.3 Lambda方法1.3.1 Lambda表達式結構1.3.2 Lambda表達式的特征 1.4 Lambda的使用1.4.1 定義函數式接口1.4.2 Lambda表達式實現函數式接口1.4.3 簡化Lambda表達式1.4.…