第13次CCF计算机软件能力认证

A

跳一跳

//比赛中可以直接用万能头文件
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
//开longlong防止爆掉int,int范围2e9,longlong范围9e18
#define int long long //(有超时风险)
//简写,如果要改动PII,直接该这个就行了,vector常用
#define PII pair<int,int>
//#define x first
//#define y second

using namespace std;

//需要改动数组直接改动N,M即可
const int N=2e5+10,M=1e3+10;
int sum=0;
int w[N],q[N],t[M];
int a,b,c;

signed main()
{
    //关掉流同步,cin变快,但是不能用scanf,可以用printf;
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    for(int i=1;i<=30;i++)cin>>w[i];
    for(int i=1;i<=30;i++)
    {
        if(w[i]==0)break;
        else if(w[i]==1&&w[i+1]==2)w[i+1]=2;
        else if(w[i]>=2&&w[i+1]==2)w[i+1]=w[i]+2;
        else if(w[i-1]>=2&&w[i]==2&&w[i+1]==1)w[i]=w[i-1]+2;
    }
    for(int i=1;i<=30;i++)
    {
        if(w[i]==0)break;
        else sum+=w[i];
        //else cout<<w[i]<<" ";
    }
    cout<<sum;

    return 0;
}

B

碰撞的小球

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;

int n,L,T;
struct Ball
{
    int p,v;//位置,速度
}b[N];

int main()
{
    cin>>n>>L>>T;
    for(int i=0;i<n;i++)
    {
        cin>>b[i].p;
        b[i].v=1;
    }
    
    while(T--)
    {
        for(int i=0;i<n;i++)
        {
            b[i].p+=b[i].v;
            if(b[i].p==L||!b[i].p)
               b[i].v*=-1;
        }
        
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(b[i].p==b[j].p)
                {
                    b[i].v*=-1;
                    b[j].v*=-1;
                }
            }
        }
    }
    
    for(int i=0;i<n;i++)
       cout<<b[i].p<<" ";
       
    return 0;
}
//向右的速度是1,那么向左的速度就是-1,每次位置的变化等于位置加速度
//写两个循环,暴力枚举

C

#include<iostream>
#include<cstring>
#include<vector>

using namespace std;

const int N = 110;

struct Url
{
    string path;
    string name;
}url[N];//使用结构体进行存储规则中的路径与名称

int n, m;

string check_num(string &str)//检查测试用例中的参数中是否为数字类型
{
    string res;//若参数为数字类型,则返回数字字符串;否则返回长度为0的字符串

    for(int i = 0; i < str.size(); i ++)
    {
        if(str[i] >= '0' && str[i] <= '9')//如果是数字,则将数字加入到res中
        {
            res += str[i];
        }
        else//否则,清空res(返回空字符串)
        {
            res.clear();
            return res;
        }
    }

    int k = 0;//去掉前导0
    while(k + 1 < res.size() && res[k] == '0') k ++;//从k + 1开始枚举,避免只有一位0但是被删除的特例
    return res.substr(k);//从第k个字符开始取字符串
}

vector<string> get(string &path, string &str)//测试用例str与规则path进行匹配
{
    vector<string> res(1);//初始化匹配结果(默认长度为1)如果长度为0,则说明匹配失败;否则返回测试用例的参数
    int i, j;

    for(i = 1, j = 1; i < path.size() && j < str.size();)//使用双指针算法,分别寻找测试用例str与规则path中,被/分割的字符串
    {
        int u = i + 1, v = j + 1;//从输入第二个字符开始寻找(输入的第一个字符全部为/,没有意义)

        while(u < path.size() && path[u] != '/') u ++;//寻找下一个/的下标,用来寻找测试用例以及规则中的参数
        while(v < str.size() && str[v] != '/') v ++;

        //substr(int start, int length) 返回从第start个字符开始,长度为length的子字符串
        //在本题中,起始时i为参数的第一个下标,从小到大开始寻找从i最近的/的前一个下标u. 下标[i, u]就表示当前参数的标识
        string a = path.substr(i, u - i), b = str.substr(j, v - j);//使用substr函数取出/string/

        if(a == "<str>")//如果规则中当前的参数为<str>
        {
            res.push_back(b);//则直接将测试用例的参数加入到res中
            i = u + 1, j = v + 1;//开始定位下一个参数的开头(u为/的下标,所以要从 u + 1开始进行下一次匹配)以下同理
        }
        else if(a == "<int>")//如果规则中当前的参数为<int>
        {
            auto t = check_num(b);//将测试用例的参数b判断是否为数字
            if(!t.empty())//如果是数字(返回字符串不为空)
            {
                res.push_back(t);//将去掉前导0的字符加入匹配结果中
                i = u + 1, j = v + 1;
            }
            else
            {
                res.clear();//否则匹配失败,清空字符串
                return res;
            }
        }
        else if(a == "<path>")//如果规则中当前的参数为<path>
        {
            res.push_back(str.substr(j));//则将剩余的字符串全部加入到参数序列中
            return res;//path后直接结束
        }
        else if(a != b)//规则匹配完毕,开始数据进行匹配;如果不等,则匹配失败
        {
            res.clear();//返回空字符串
            return res;
        }
        else i = u + 1, j = v + 1;//普通字符串不是参数,不用存,比如说articles就不用存
    }
    //对于最后一位有没有/的特殊条件也要作为一个特殊判断
    //如果测试用例和规则的结尾都没有/时,那么i能取到path.size() + 1
    //(因为在之前的匹配中,我们总能寻找到最后一个/的下标u,如果最后没有/,则说明u能取到path.size(),这样i在加上1就等于path.size() + 1
    //如果测试用例和规则的结尾都有/时,那么i能取到path.size()
    //(因为u只能返回/的前一个字符下标,i = u + 1时 i正好表示规则字符的长度)
    if(i - path.size() != j - str.size()) res.clear();//所以只需要判断i - path.size() 与 j - str.size()是否相等,就能判断在结尾是否都有或都没有/

    return res;
}

void work(string &str)//返回匹配测试用例与所有规则进行匹配的结果
{
    for(int i = 0; i < n; i ++)
    {
        auto res = get(url[i].path, str);//将规则与测试用例进行匹配,返回测试用例中传入的参数
        //get函数()返回匹配后参数的个数.如果匹配不成功,返回0个数据();如果匹配成功,但测试用例中的参数为0,则返回一个长度为1的默认参数
        //如果匹配成功并且传入的参数不为空,则返回传入的参数(第一个返回值为默认值,后面的值才是实际传入的参数)

        if(res.size())//如果匹配成功
        {
            cout << url[i].name;//首先输出规则的名称
            for(int j = 1; j < res.size(); j ++)
            {
                cout << ' ' << res[j];//之后遍历所有测试用例的参数
            }
            cout << endl;
            return ;
        }
    }
    puts("404");//如果不匹配,则返回404
}

int main()
{
    cin >> n >> m;

    for(int i = 0; i < n; i ++)//读入所有规则
    {
        cin >> url[i].path >> url[i].name;
    }

    for(int i = 0; i < m; i ++)//将测试用例读入
    {
        string test;
        cin >> test;

        work(test);//输入测试用例
    }

    return 0;
}

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

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

相关文章

uView 2.0:uni-app生态的利剑出鞘,引领UI框架新纪元

引言 随着移动互联网的快速发展&#xff0c;跨平台应用开发成为了开发者们关注的焦点。uni-app&#xff0c;一个基于Vue.js的跨平台应用开发框架&#xff0c;因其高效、易用的特性而广受欢迎。在uni-app的生态系统中&#xff0c;UI框架的选择对于开发者而言至关重要。今天&…

AI 编程探索- iOS动态标签控件

需求分析&#xff1a; 标签根据文字长度&#xff0c;自适应标签居中显示扩展 超过内容显示范围&#xff0c;需要换行显示&#xff0c;且保持居中显示 AI实现过程 提问&#xff1a; 回答&#xff1a; import UIKit import SnapKitclass DynamicLabelsContainerView: UIView…

docker 多网卡指定网卡出网

前言 宿主机中有多个网卡 ens160 192.168.4.23/20 内网通信用 ens192 10.31.116.128/24 出公网访问-1 ens193 10.31.116.128/24 出公网访问-2 现在需要不同容器中不同出网访问&#xff0c;举例 容器1 192.168.0.1/20 网段走宿主机 ens160网卡&#xff0c;否则全部走ens192 网…

CAS自旋解析

CAS全称CompareAndSwap(比较并交换)&#xff0c;是cpu的指令&#xff0c;调用时不涉及上下文的切换。Java中属于乐观锁的一种&#xff0c;具体流程如下图&#xff1a; 具体的实现使用的是Unsafe类去调用native修饰的compareAndSwap方法&#xff0c;4个字段分别是对象实例&#…

Shell编程实战

脚本编程步骤 脚本编程一般分为以下几个步骤: 需求分析:根据系统管理的需求&#xff0c;分析脚本要实现的功能、功能实现的层次、实现的命令与语句等; 命令测试:将要用到的命令逐个进行测试&#xff0c;以决定使用的选项、要设置的变量等: 脚本编程:将测试好的命令写入到脚本文…

庆祝东兴市金顺心贸易有限公司代理越南三原竹系列产品五周年

&#x1f389;庆祝金顺心贸易代理越南三原竹系列产品五周年&#xff01;这五年&#xff0c;我们共同成长&#xff0c;每一份产品都承载着越南的美味与匠心。感恩有你们&#xff0c;未来的路&#xff0c;我们继续携手前行&#xff0c;品味更多美好&#xff01;&#x1f962;&…

电子名片小程序源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 电子名片小程序源码系统是一款基于前后端分离架构的综合性平台&#xff0c;旨在为用户提供一个集销售名片和企业商城于一体的解决方案。该系统采用先进的技术手段&#xff0c;实现了个性化名片设计、便捷的销售功能、企业商城模块等一系列实用功能。同时&#xff0c;…

vue-cli 搭建项目

创建 router 目录 在一个.js文件中添加 打开外部命令 打开外部命令后&#xff0c;在指令栏输入npm i vue-router3.5.3 &#xff0c;等待下载 下载完成后 在 main.js 中配置路由 输入这些后&#xff0c;基本的配置就实现了 最后进行测试&#xff0c;验证是否配置 或者打开外部命…

springcloud第4季 分布式事务seata作用服务搭建1

一 seata作用 1.1 seata简介 1.seata是一款解决分布式事务的解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 1.2 seata的术语 一个中心&#xff1a;全局事务id&#xff0c;xid&#xff0c;在调用服务链路的上下文中进行传播。TC(Transa…

iPhone怎么恢复删除的数据?几款顶级iPhone数据恢复软件

从iOS设备恢复数据。 对于任何数据恢复软件来说&#xff0c;从iOS设备恢复数据都是一项复杂的任务&#xff0c;因为Apple已将众多数据保护技术集成到现代iPhone和iPad中。其中包括硬件加密和文件级加密。iOS 上已删除的数据只能通过取证文件工件搜索来找到&#xff0c;例如分析…

最新扣子(Coze)实战案例:图像流工具之空间风格化,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

EHS,制造业安全绿色生产的隐形守护神

当我们提到EHS&#xff0c;可能很多人会稍感陌生&#xff0c;毕竟它不是一个日常生活中经常提及的词汇。但实际上&#xff0c;EHS在我们的生活和工作中扮演着极其重要的角色&#xff0c;尤其对制造业而言更是可持续发展经营管理的重中之重。 一、EHS是什么意思&#xff1f; E…

vue项目内网部署流程

由于第一次部署&#xff0c;也是第一次自己用 Nginx , 百度了很久&#xff0c;没有看到想看的步骤&#xff0c;所以作此文以记录&#xff0c;也是给像我一样的人一个大概方向。 注&#xff1a;windows系统 1、首先要弄好jar包的运行环境。 安装jdk 详细安装过程引用 jdk的完整…

码农:如何快速融入团队

问题&#xff1a; 码农如何快速融入团队&#xff1f; 记住一个标准&#xff1a;能干事、能抗事。 总结一个字&#xff1a; 靠谱。 适用范围&#xff1a;新手码农、老司机码农、测试、DBA、运维、产品经理、项目经理、架构师、技术专家、。。。。适用于任何行业的打工者。 下面要…

伙伴活动推荐丨当 RTC 遇上 AI ,大模型创新应用星城论道

近年来&#xff0c;音视频技术已成为推动在线新经济和企业数字化转型的重要力量。作为中部互联网产业高地&#xff0c;湖南长沙亦将音视频产业视为战略性新兴产业重点布局。 2024年7月6日&#xff0c;声网联合 CSDN 在湖南长沙举办声网城市沙龙&#xff0c;以“当 RTC 遇上 AI…

VMware Workstation环境下,DHCP服务的安装配置,用ubuntu来测试

需求说明: 某企业信息中心计划使用IP地址17216.11.0用于虚拟网络测试,注册域名为xyz.net.cn.并将172.16.11.2作为主域名的服务器(DNS服务器)的IP地址,将172.16.11.3分配给虚拟网络测试的DHCP服务器,将172.16.11.4分配给虚拟网络测试的web服务器,将172.16.11.5分配给FTP服务器…

Matlab/simulink三段式电流保护

电流1段仿真波形如下所示 电流2段仿真波形如下所示 电流3段仿真波形如下所示

SSL证书在网站访问中的核心作用及快速申请指南

在当今的互联网时代&#xff0c;数据安全与用户隐私保护成为了网站运营不可或缺的一部分。SSL证书作为一种重要的网络安全协议&#xff0c;它在网站访问中扮演着至关重要的角色&#xff0c;主要体现在以下几个方面&#xff1a; 一、加密通信内容&#xff1a;SSL证书通过建立安…

系统进程与计划任务

目录 系统进程 ps命令 top命令 pgrep命令 pstree命令 jobs命令 计划任务 一次性计划任务at 周期性计划任务crontab 系统进程 我们系统在打开的一瞬间就会加载很多进程&#xff0c;那么我们该如何查看这些进程和管理这些进程呢&#xff1f; ps命令 常用的参数 -a&am…

Linux创建目录——mkdir命令,du命令,touch用法,创建tree拓扑图

1. mkdir 命令 格式 mkdir - 参数 路径 / 目录名 参数 -p &#xff1a;快速创建多级目录&#xff08;递归目录&#xff09; -v &#xff1a;显示创建目录的详细过程 例&#xff1a; [rootserver ~] # mkdir t1 [rootserver ~] # mkdir t2 t3 t4 [rootserver ~] # mk…