第二次CCF-CSP认证(思路及源码)

第二次CCF-CSP认证

  • 第一道(easy)
    • 思路及AC代码
  • 第二道(easy)
    • 基本思路及AC代码
  • 第三道(mid)
    • 基本思路及AC代码
      • solution 1 (模拟)
      • solution 2(KMP)

第一道(easy)

在这里插入图片描述
题目链接

思路及AC代码

#include <bits/stdc++.h>
using namespace std;
//基本思路就是先读一下输入的这堆数字,然后给他排个序,算出每两个相邻数字之间的差值
//然后遍历一下,如果差值为1,用一个外部变量res记录一下啊,否则不做特殊处理
const int N=1010;
int s[N];
int main()
{
    int n;
  cin>>n;
  //读入这堆乱序的数字
  for(int i=0;i<n;i++)
  {
      cin>>s[i];
  }
  sort(s,s+n);//表示从首地址到末尾排一下序 
  int res=0;
  for(int i=0;i<n;i++)
  {
      //遇到的问题:如果用while就意味这遇到差值为1的时候会陷入死循环导致超时
   if(s[i+1]-s[i]==1)
   {
       res++;
   }
  }
  cout <<res<<endl;
  return 0;
}

第二道(easy)

在这里插入图片描述
题目链接

基本思路及AC代码

#include <bits/stdc++.h>
using namespace std;
//前言:
//这题如果使用时间复杂度最优的算法需要使用扫描线的知识,但是这题的数据范围十分有限
//我们可以用暴力的思路来解决 时间复杂度是n*nlogn 扫描线可以做到nlogn;
//基本思路:
//题目的意思是给定几个被染色的矩形,我们需要求出并集,并输出

//需要开一个bool数组来标记被染色的矩形
const int N=110;//避免溢出
bool s[N][N];
int main()
{
    int n;
    cin>>n;
    //n表示矩形的个数
    while(n--)
    {
        //在读入之前必须要先定义一下
        int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    //用嵌套for循环先标记一下被染色的数组
    for(int x=x1;x<x2;x++)//当我们标记到最右上角的矩形的时候,实际上的编号并不是x2
    //而是x2-1 所以这里边界需要注意控制一下 纵坐标同理
    for(int y=y1;y<y2;y++)
        s[x][y]=true;
    }
    int res=0;
    //现在我们只需要遍历整个矩形统计一下被染色的矩形即可
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
        if(s[i][j]==true)
        {
            res++;
        }
        }
    }
    cout<<res<<endl;
    return 0;
}

第三道(mid)

在这里插入图片描述
题目链接

基本思路及AC代码

在这里插入图片描述

基本思路:KMP算法或者暴力枚举(思路参考y总)
由于本题字符串的长度只有100 可以优先考虑暴力的思路
我们读入一个type0 or1 (注意type是bool类型)表示大小写是否敏感
如果大小写不敏感也就是type=1的时候 我们使用库函数tolower将给定的字符串和目标中所有字母统一变为小写字母 然后再找
如果敏感 我们直接用string里面自带的库函数str.find(s)就能从给出的字符串里找到目标
然后将其输出就好。

solution 1 (模拟)


#include<iostream>
using namespace std;
const int N=110;
string get(string str)
{
    string res;
    for(auto c:str)
        res+=tolower(c);
    return res;
}
int main()
{
    string s;
    cin>>s;
    int n;
    bool type;
    cin>>type>>n;
    while(n--)
    {
        string str;
        cin>>str;
        if(type && str.find(s)!=-1) cout<<str<<endl;
        else if(!type&&get(str).find(get(s))!=-1) cout<<str<<endl;//注意两个字符串都要变成小写
    }
    return 0;
}

solution 2(KMP)

忘记了的话回顾一下我的文章 BP & KMP算法

#include <iostream>
#include <string>

using namespace std;


const int N = 110;

// 函数功能:将字符串中的所有字母转换为小写形式
// 参数:str - 待转换的字符串
// 返回值:转换为小写后的字符串
string get(string str) {
    string res;
    // 遍历字符串中的每个字符
    for (auto c : str) {
        // 将字符转换为小写并添加到结果字符串中
        res += tolower(c);
    }
    return res;
}

// 函数功能:计算 KMP 算法中的 nextval 数组,用于优化字符串匹配过程
// 参数:str - 模式字符串;maxnext - 存储 nextval 值的数组
void GetNextval(string str, int maxnext[]) {
    int j = 0, k = -1;
    // 初始化 nextval 数组的第一个元素为 -1
    maxnext[0] = -1;
    // 遍历模式字符串
    while (j < str.length()) {
        if (k == -1 || str[j] == str[k]) {
            j++;
            k++;
            // 当 str[j] 与 str[k] 不相等时,记录 nextval 值为 k
            if (str[j] != str[k]) {
                maxnext[j] = k;
            } else {
                // 当 str[j] 与 str[k] 相等时,nextval 值取 str[k] 的 nextval 值
                maxnext[j] = maxnext[k];
            }
        } else {
            // 不匹配时,k 回溯到 maxnext[k] 的位置
            k = maxnext[k];
        }
    }
}

// 函数功能:使用 KMP 算法在文本串中查找模式串
// 参数:text - 文本串;pattern - 模式串;next - nextval 数组
// 返回值:若找到匹配,返回模式串在文本串中的起始位置;未找到则返回 -1
int kmpSearch(const string& text, const string& pattern, const int next[]) {
    int i = 0, j = 0;
    while (i < text.length() && j < pattern.length()) {
        if (j == -1 || text[i] == pattern[j]) {
            i++;
            j++;
        } else {
            // 不匹配时,j 回溯到 next[j] 的位置
            j = next[j];
        }
    }
    // 若 j 等于模式串长度,说明找到了匹配
    if (j == pattern.length()) {
        return i - j;
    }
    return -1;
}

int main() {
    string t;
    bool st;
    int n;
    // 输入目标字符串
    cin >> t;
    // 输入是否区分大小写的标志,true 表示区分,false 表示不区分
    cin >> st;
    // 输入待匹配字符串的数量
    cin >> n;

    while (n--) {
        string s;
        // 输入待匹配的字符串
        cin >> s;
        string ss = s;
        string tt = t;

        // 如果不区分大小写,将两个字符串都转换为小写
        if (!st) {
            ss = get(s);
            tt = get(t);
        }

        int next1[N];
        // 计算模式串的 nextval 数组
        GetNextval(tt, next1);

        // 使用 KMP 算法进行字符串匹配
        if (kmpSearch(ss, tt, next1) != -1) {
            // 若找到匹配,输出原始的待匹配字符串
            cout << s << endl;
        }
    }
    return 0;
}


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

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

相关文章

RAGflow 无法加载Embedding模型

部署0.17版本的RAGflow&#xff0c;在模型列表中已经添加了嵌入模型&#xff0c;但是知识库配置时&#xff0c;嵌入模型灰显&#xff1a; 问题原因&#xff1a; 提前上传了一个文档&#xff0c;在知识库有文档之后&#xff0c;就不能够修改嵌入模型了。删除文档之后&#xff0…

C++ Primer 拷贝、赋值与销毁

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程

记录工作实践 这是全新的系列&#xff0c;一直有个游戏制作梦 感谢AI时代&#xff0c;让这一切变得可行 长欢迎共同见证&#xff0c;期更新&#xff0c;欢迎保持关注&#xff0c;待到游戏上架那一天&#xff0c;一起玩 面向AI编程的godot独立游戏制作流程实录001 本期是第…

计算机毕业设计Python+DeepSeek-R1大模型空气质量预测分析(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…

单片机项目复刻需要的准备工作

一、前言 复刻单片机的项目的时候&#xff0c;有些模块是需要焊接的。很多同学对焊接没有概念。 这里说一下做项目的基本工具。 比如&#xff1a;像这种模块&#xff0c;都需要自己焊接了排针才可以链接的。 二、基本模块 2.1 单排排针 一些模块买回来是没有焊接的&#x…

微服务概览与治理

微服务概览与治理 1. 微服务架构的演进 1.1 引言 当我们讨论微服务时&#xff0c;我们并不是在谈论一种炫酷的新技术&#xff0c;而是在寻找一种更好的方式来组织我们的软件系统&#xff0c;使其更易扩展、更易维护。软件架构的发展历程往往是对业务需求和技术挑战的回应。从…

《代码随想录第五十七天》——孤岛的总面积、沉没孤岛、水流问题、建造最大岛屿

《代码随想录第五十七天》——孤岛的总面积、沉没孤岛、水流问题、建造最大岛屿 本篇文章的所有内容仅基于C撰写。 1. 孤岛的总面积 1.1 题目 孤岛的总面积 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指…

IntelliJ IDEA 华为云远程开发配置步骤

1.连接华为云主机,点击New Project 2.输入用户名与主机IP后连接 3.输入密码授权连接 4.继续连接 注意,远程主机内存最少要4G才能启动后端IDE 5.连接华为云主机成功,下载IDE并连接 选择项目位置

23种设计模式之单例模式(Singleton Pattern)【设计模式】

文章目录 一、简介二、关键点三、实现单例模式的步骤四、C#示例4.1 简单的单例模式4.2 线程安全的单例模式&#xff08;双重检查锁定&#xff09;4.3 静态初始化单例模式 五、单例模式优缺点5.1 优点5.2 缺点 六、适用场景七、示例的现实应用 一、简介 单例模式&#xff08;Si…

c盘爆红后,使用diskgenius给C盘无损扩容,操作记录

diskgenius下载链接 参考链接 操作前环境 之前电脑配置了一个每天定时清理c盘临时文件的脚本&#xff0c;依然阻止不了c盘爆红。 实测DISKGENIUS 无损扩容有效&#xff0c;扩容前的环境&#xff1a; 扩容前&#xff0c;C区可用空间 9G,爆红C盘D盘都是 NTFS 格式&#xff0c;D…

【音视频】ffplay简单过滤器

一、ffplay简单过滤器 视频旋转&#xff1a;借助transpose滤镜 ffplay -i 1.mp4 -vf transpose1这里选择不同的数字是不同的方向&#xff1a; 视频翻转&#xff1a;借助hflip/vflip实现水平和垂直翻转&#xff1a; 水平翻转 ffplay 1.mp4 -vf hflip垂直翻转 ffplay 1.mp4 …

蓝桥杯备考:动态规划路径类dp之迷雾森林

step1 :确定状态表示 f[i][j]表示 n,n 到 i,j的方案数 step2 : 推导状态转移方程初始化 step3 确认填表顺序 应该是从下往上&#xff0c;从左往右 step4:答案在f[1][m] 代码实现&#xff1a; #include <iostream> #include <cstring> using namespace std; i…

零售交易流程相关知识(top-down拆解)

引入 关于POS机交易时的后台数据交互 模块之间数据交换&#xff0c;都可以能被窃取或篡改。由此引入加密、解密机制和签名、验签机制 经典的加密、解密机制&#xff1a; 对称加密&#xff1a;DES\ TDES\ AES\ RC4 非对称加密&#xff1a;RSA\ DSA\ ECC 经典的签名、验签…

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…

数据可携带权的多重价值与实践思考

文章目录 前言一、数据可携带权的提出与立法二、数据可携带权的多重价值1、推动数据要素市场化配置2、促进市场竞争与创新3、强化个人数据权益 三、数据可携带权的实践挑战1、数据安全与隐私保护面临风险2、接口差异导致数据迁移成本高昂3、可携带的数据范围尚存争议 数据可携带…

博客系统自动化测试_测试报告

项目背景 开发出一个专属于自己的博客系统&#xff0c;可以完全按照自己的需求来设计&#xff0c;比如&#xff1a;去掉那些花里胡哨的功能和广告&#xff0c;只保留自己真正需要的&#xff0c;比如文章发布、分类、标签、搜索等。可以根据自己的审美设计界面&#xff0c;想要…

【VUE】第一期——初使用、基本语法

目录 0 前言 1 准备工作 1.1 创建vue实例 1.2 vue开发者工具 2 插值表达式 2.1 基本用法 3 常用指令 3.1 内容渲染指令 3.1.1 v-text 3.1.2 v-html 3.2 条件渲染指令 3.2.1 v-show 3.2.2 v-if 3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 3.3.1 内联语句 3.3…

大数据学习(57)-DataX基础

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤&#xff08;Ollama方式&#xff09;1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…