每日一题——博弈论(枚举与暴力)

博弈论

题目描述

运行代码

#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.mzph.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.…