笔试题目回忆

(1)给出n,k,n表示数组个数,k表示要剔除的个数,接下来n个数为数组元素,求剔除k个数之后,其他所有数互为倍数,每个数最多剔除一次。

未检测代码,超时。

#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <algorithm>
using namespace std;

set<string> strset;
int ans = 0;
bool check(vector<int> nums, vector<int> path) {
    for (int i = 0; i < path.size(); i++) {
        nums[path[i]] = 0;
    }
    sort(nums.begin(), nums.end());
    bool flag = true;
    for (int i = path.size()+1; i < nums.size(); i++) {
        if (nums[i] % nums[i-1]) {
            flag = false;
            break;
        }
    }
    if (flag) {
        for (int i = 0; i < path.size(); i++) {
            cout << path[i] << " ";
        }
        cout << endl;
    }
    return flag;
}

void backtrace(vector<int>& nums, int start, vector<int> path, vector<int> vis, int k) {
    if (path.size() == k) {
        if (check(nums, path)) {
            string ns = "";
            sort(path.begin(), path.end());
            for (int ll = 0; ll < k; ll++) {
                ns += to_string(path[ll]);
            }
            strset.insert(ns);

        }
        return;
    }
    if (start >= nums.size()) return;
    for (int i = start; i < nums.size(); i++) {
        // 这里不再需要vis数组,因为每次是从i+1往后选择,不是从头开始选择
        // 如果每次for循环是从头开始的话,需要vis数组进行标记
        // if (!vis[i]) {
        //     vis[i] = 1;
            path.push_back(i);
            backtrace(nums, i+1, path, vis, k);
            path.pop_back();
            // vis[i] = 0;
            // if (path.size() < k)
            backtrace(nums, i+1, path, vis, k);
        // }

    }
}

int main() {
    int n, k;
    while (cin >> n >> k) { // 注意 while 处理多个 case
        int t;
        vector<int> nums(n);
        for (int i = 0; i < n; i++) {
            cin >> t;
            nums[i] = t;
        }

        vector<int> vis(n);
        vector<int> path;
        backtrace(nums, 0, path, vis, k);

        cout << strset.size() << endl;

    }
    return 0;
}

递归执行图如下:

如果输入为4 2

1 2 4 6   (粉红色表示path.size() == k时返回)(蓝色表示start>=nums.size()时返回)

 (2)输入n,m,n表示接下来输入n个长度为m的字符串,从每个字符串中选一个字符组合为一个字符串,求是否存在一个字符串的子序列为“meituan”。

下面是超时的方法,没有测试用例。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

bool flag = false;
void backtrace(vector<string>& strs, string& s, int depth, int ind) {
    if (flag) return;
    if (depth == s.size()) {
        // cout << depth << endl;
        flag = true;
        return;
    }
    if (strs.size() - ind < s.size() - depth) return;
    for (int i = ind; i < strs.size(); i++) {
        if (strs[i].find(s[depth]) != string::npos) {
            backtrace(strs, s, depth+1, i+1);
        }
        backtrace(strs, s, depth, i+1);
    }
}

int main() {
    int n, m;
    while (cin >> n >> m) { // 注意 while 处理多个 case
        string t;
        vector<string> strs;
        for (int i = 0; i < n; i++) {
            cin >> t;
            strs.push_back(t);
        }        
        if (n < 7) {
            cout << "NO" << endl;
        } else {
            for (int i = 0; i < n; i++) {
                // 找到m的第一个位置,以此位置为起点,进行回溯
                if (strs[i].find('m') != string::npos) {
                    string s = "meituan";
                    if (flag) break;
                    backtrace(strs, s, 1, i+1);
                }
            }
            if (flag) {
                cout << "YES" << endl;
            } else {
                cout << "NO" << endl;
            }
        }
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/101332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件外包开发人员分类

在软件开发中&#xff0c;通常会分为前端开发和后端开发&#xff0c;下面和大家分享软件开发中的前端开发和后端开发分类和各自的职责&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 前端开发&…

Dump文件的生成以及使用WinDbg静态分析

前言 本文章主要介绍了如何生成Dump文件&#xff0c;包括两种方式&#xff0c;通过代码生成和通过注册表生成。并且介绍了WinDbg工具的下载和使用&#xff0c;以及如何使用WinDbg工具去静态分析Dump文件&#xff0c;从而找到程序的崩溃位置。 生成Dump文件 通过调用WinAPI生成…

OpenCV模块介绍

其中core、highgui、imgproc是最基础的模块&#xff0c;该课程主要是围绕这几个模块展开的&#xff0c;分别介绍如下: core模块实现了最核心的数据结构及其基本运算&#xff0c;如绘图函数、数组操作相关函数。 highgui模块实现了视频与图像的读取、显示、存储等接口。 imgp…

Kafka知识点总结

常见名词 生产者和消费者 同一个消费组下的消费者订阅同一个topic时&#xff0c;只能有一个消费者收到消息 要想让订阅同一个topic的消费者都能收到信息&#xff0c;需将它们放到不同的组中 分区机制 启动方法 生成者和消费者监听客户端

stable diffusion实践操作-大模型介绍

本文专门开一节写大模型相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 模型下载网站 国内的是&#xff1a;https://www.liblibai.com 国外的是&#xff1a;https://civitai.com&#xff08;科学上网&#xff09; 一、发展历…

一个面向MCU的小型前后台系统

JxOS简介 JxOS面向MCU的小型前后台系统&#xff0c;提供消息、事件等服务&#xff0c;以及软件定时器&#xff0c;低功耗管理&#xff0c;按键&#xff0c;led等常用功能模块。 gitee仓库地址为&#xff08;复制到浏览器打开&#xff09;&#xff1a; https://gitee.com/jer…

linux安装firefox

1.下载对应包 https://www.mozilla.org/en-US/firefox/all/#product-desktop-release 2. 挂载桌面链接(如果/usr/bin/firefox下有的话,先删除) ln -s /opt/firefox/firefox /usr/bin/firefox 3.执行以下命令&#xff0c;即可启动Firefox客户端&#xff1a; firefox

WSL中为Ubuntu和Debian设置固定IP的终极指南

文章目录 **WSL中为Ubuntu和Debian设置固定IP的终极指南****引言/背景****1. 传统方法****2. 新方法:添加指定IP而不是更改IP****结论**WSL中为Ubuntu和Debian设置固定IP的终极指南 引言/背景 随着WSL(Windows Subsystem for Linux)的普及,越来越多的开发者开始在Windows…

WPF Material Design 初次使用

文章目录 前言相关资源快速开始快速开始说明地址 吐槽一下 前言 MD全称MaterialDesignInXamlToolkit&#xff0c;MaterialDesign和Bootstrap一样&#xff0c;都是一个UI风格库。相当于衣服中的休闲服&#xff0c;汉服&#xff0c;牛仔裤一样&#xff0c;就是风格不一样的Ui框架…

VS + QT 封装带UI界面的DLL

一、创建编译DLL的项目 1.新建Qt Class Liabrary 2.新建项目&#xff0c;选择Qt Widgets Class 3.新建C类&#xff0c;可以在此类里面写算法函数用于调用。 4.下面是添加完Qt窗体类和C类之后的项目截图 5.修改头文件并编译 将uidemo_global.h中的ifdef内容复制到dialog.h上…

leetcode 1365. 有多少小于当前数字的数字

2023.9.2 本题直观的解法就是双层for循环暴力求解&#xff1a; 暴力解&#xff1a; class Solution { public:vector<int> smallerNumbersThanCurrent(vector<int>& nums) {vector<int> ans;for(int i0; i<nums.size(); i){int temp 0;//比当前元素…

ESP32C3 LuatOS RC522②写入字符串

编写了字符串转16进制表函数 -- 将字符串转换为十六进制表 local function stringToHexTable(str)local hexTable {}local maxLength 16 -- 最大长度为16个元素-- 将字符串转换为十六进制for i 1, #str doif i > maxLength thenbreakendlocal hex string.format("…

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system&#xff0c;称之为 文件系统&#xff0c;是 Node.js 中的 内置模块&#xff0c;可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作&#xff1a; 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …

每日一题(链表中倒数第k个节点)

每日一题&#xff08;链表中倒数第k个节点&#xff09; 链表中倒数第k个结点_牛客网 (nowcoder.com) 思路: 如下图所示&#xff1a;此题仍然定义两个指针&#xff0c;fast指针和slow指针&#xff0c;假设链表的长度是5&#xff0c;k是3&#xff0c;那么倒数第3个节点就是值为…

项目总结知识点记录-文件上传下载(三)

&#xff08;1&#xff09;文件上传 代码&#xff1a; RequestMapping(value "doUpload", method RequestMethod.POST)public String doUpload(ModelAttribute BookHelper bookHelper, Model model, HttpSession session) throws IllegalStateException, IOExcepti…

Git使用

本地操作 1. 初始化git仓库 git init 把当前目录变成git可以管理的仓库 git init2.登录-身份认证 区别登录和注册 git config --global user.name “xxx” git config --global user.email “xxxqq.com”/3.下载别人的git git clone https://gitee.com/meini/user-menage…

Gorm简单了解

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 04_GORM查询操作_哔哩哔哩_bilibili 前置&#xff1a; db调用操作语句中间加debug&#xff08;&#xff09;可以显示对应的sql语句 1.Gorm模型定义&#xff08;理解重点&#xff…

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…

不同写法的性能差异

“ 达到相同目的,可以有多种写法,每种写法有性能、可读性方面的区别,本文旨在探讨不同写法之间的性能差异 len(str) vs str "" 本部分参考自: [问个 Go 问题&#xff0c;字符串 len 0 和 字符串 "" &#xff0c;有啥区别&#xff1f;](https://segmentf…

002图的基本概念与表示方法

文章目录 一. 图的组成二. 本体图2.1 什么是本体图2.2 怎么设计本体图 三. 图的种类3.1 按连接是否有向分3.2 按本体图分3.3 按连接是否带权重分 四. 节点连接数&#xff08;节点的度&#xff09;4.1 无向图节点的度4.2 有向图节点的度 五. 图的表示方法5.1 邻接矩阵5.2 连接列…