当前位置: 首页 > news >正文

ABC322刷题记

ABC322刷题记

T1.A

A - First ABC 2。

妥妥的简单题……

用find函数做就行。(如果不存在那个子串就返回-1,否则返回第一次出现位置)

注意题目中编号是从1开始的。

时间复杂度:O(log(n))。find函数有一定代价,我记得是log。

#include<bits/stdc++.h>
using namespace std;
string str="";
int n=0;
int main(){
    scanf("%d",&n);
    cin>>str;
    //输入
    str=" "+str;
    //处理:把0开头改成1开头
    printf("%d\n",str.find("ABC"));
    //输出答案
    return 0;
}

T2.B

B - Prefix and Suffix。

前两题都一样简单。

用substr截取出t中与s长度相同的前缀和后缀,分别和s比较即可。

时间复杂度先不算了,因为肯定够。

#include<bits/stdc++.h>
using namespace std;
int m=0,n=0;
string s="",t="";
int main(){
    scanf("%d%d",&n,&m);
    cin>>s>>t;
    //输入
    string front=t.substr(0,n),rear=t.substr(m-n,n);
    //去除前缀与后缀
    if(front==s&&rear==s){
        printf("0\n");
    }else{
        if(front==s&&rear!=s){
            printf("1\n");
        }else{
            if(front!=s&&rear==s){
                printf("2\n");
            }else{
                printf("3\n");
            }
        }
    }
    //对号入座,输出不错
    return 0;
}

T3.C

C - Festival。

还是辣墨简单……

用b数组记录某一天是否有烟花,在用ans数组从后往前算,其中ans[i]表示离第i天最近并且时间不比第i天早的放烟花的日子与第i天相差多少。

最后从1到n输出ans的对应项即可。

时间复杂度:O(n),应该是最优的思路了。

#include<bits/stdc++.h>
#define M 220000
#define N 220000
using namespace std;
int ans[N]={},a[M]={},m=0,n=0;
bool b[N]={};
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d",&a[i]);
        b[a[i]]=true;
    }
    //输入,并维护b数组
    for(int i=n;i>=1;i--){
        if(b[i]==true){
            ans[i]=0;
            //①当前这一天就有烟花:距离为0
        }else{
            ans[i]=ans[i+1]+1;
            //②当前这一天没有烟花:比明天的距离多一天
        }
    }
    //计算ans
    for(int i=1;i<=n;i++){
        printf("%d\n",ans[i]);
    }
    //输出答案
    return 0;
}

T4.D

D - Polyomino。

客观来说,我这道题没做出来真有些丢人。

其实就是一个dfs,但是一个变量名害我找了1天6小时34分钟……

我们定义一个结构体,存储一块牌,如果一个坐标上有点,就记录为1,否则记录为0。支持项各个方向平移(如果会出格,就返回不能做,否则返回操作成功)、顺时针旋转、逆时针旋转操作,当然还要封装加法(把骨牌拼接起来,其实就是相同坐标的点记录的数相加,如果相加后和为0,就说明这里本来就没有点,如果为1就说明刚好有一个牌上有,如果大于1就说明有多个牌子上面有这个点,当然,只有当3块牌都记起来之后和为1才能说明这种摆法可能合法)、等于号(骨牌完全相同,用于判断拼完之后是不是和满牌相同)。

在dfs中,我们不难证明先旋转(遍历旋转次数,去时顺时针,回时逆时针),在平移(反方向的平移互相作为返回操作)是不会有问题的,当然要注意平移可以项各种方向平移多次。

最终大体流程是这样:使用dfs,遍历三个牌的操作,如果最后拼起来是满牌就说明可以达成目的,直接标记最终答案为“可行”,并一路退出回到主程序,否则继续往下遍历。遍历操做时,先考虑旋转,再考虑平移。最后输出Yes/No即可。

时间复杂度不好算,这里不展开描述,但是数据量都是4、16这类数,估计也没啥事。

#include<bits/stdc++.h>
using namespace std;
struct Info{
    int num[4][4];
    Info operator+(Info ot){
        Info ret={};
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                ret.num[i][j]=num[i][j]+ot.num[i][j];
            }
        }
        return ret;
    }
    //拼接
    bool operator==(Info ot){
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                if(num[i][j]!=ot.num[i][j]){
                    return false;
                }
            }
        }
        return true;
    }
    //判等
    bool down(){
        for(int i=0;i<4;i++){
            if(num[3][i]==1){
                return false;
            }
        }
        for(int i=3;i>=1;i--){
            for(int j=0;j<4;j++){
                num[i][j]=num[i-1][j];
            }
        }
        for(int i=0;i<4;i++){
            num[0][i]=0;
        }
        return true;
    }
    //下移
    bool left(){
        for(int i=0;i<4;i++){
            if(num[i][0]==1){
                return false;
            }
        }
        for(int i=0;i<=2;i++){
            for(int j=0;j<4;j++){
                num[j][i]=num[j][i+1];
            }
        }
        for(int i=0;i<4;i++){
            num[i][3]=0;
        }
        return true;
    }
    //左移
    bool right(){
        for(int i=0;i<4;i++){
            if(num[i][3]==1){
                return false;
            }
        }
        for(int i=3;i>=1;i--){
            for(int j=0;j<4;j++){
                num[j][i]=num[j][i-1];
            }
        }
        for(int i=0;i<4;i++){
            num[i][0]=0;
        }
        return true;
    }
    //右移
    bool up(){
        for(int i=0;i<4;i++){
            if(num[0][i]==1){
                return false;
            }
        }
        for(int i=0;i<=2;i++){
            for(int j=0;j<4;j++){
                num[i][j]=num[i+1][j];
            }
        }
        for(int i=0;i<4;i++){
            num[3][i]=0;
        }
        return true;
    }
    //上移
    void spina(){
        Info ret={};
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                ret.num[i][j]=num[3-j][i];
            }
        }
        memcpy(num,ret.num,sizeof(num));
        return;
    }
    //顺时针旋转
    void spinb(){
        Info ret={};
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                ret.num[i][j]=num[j][3-i];
            }
        }
        memcpy(num,ret.num,sizeof(num));
        return;
    }
    //逆时针旋转
};
Info inf[10]={};
bool ans=false;
inline void dfs(int d);
//深度优先搜索用到函数
inline void tmovew(int d);
//遍历旋转,用完后返回原始状态
inline void tmovex(int d);
//遍历横移,用完后返回原始状态
inline void tmovey(int d);
//遍历竖移,用完后返回原始状态
int main(){
    inf[4]={{{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}};
    //满牌
    for(int i=0;i<4;i++){
        string str="";
        cin>>str;
        for(int j=0;j<4;j++){
            if(str[j]=='#'){
                inf[1].num[i][j]=1;
            }
        }
    }
    for(int i=0;i<4;i++){
        string str="";
        cin>>str;
        for(int j=0;j<4;j++){
            if(str[j]=='#'){
                inf[2].num[i][j]=1;
            }
        }
    }
    for(int i=0;i<4;i++){
        string str="";
        cin>>str;
        for(int j=0;j<4;j++){
            if(str[j]=='#'){
                inf[3].num[i][j]=1;
            }
        }
    }
    //输入,并处理成Info格式
    dfs(1);
    //dfs
    if(ans==false){
        printf("No\n");
    }else{
        printf("Yes\n");
    }
    //根据答案输出
    return 0;
}
inline void dfs(int d){
    if(d==4){
        //3个骨牌遍历完成
        if(inf[1]+inf[2]+inf[3]==inf[4]){
            ans=true;
            //若相加为满牌,就说明答案可行,直接记录答案为“Yes”,或者说true
        }
        return;
        //递归出口
    }
    if(ans==true){
        return;
        //已经找到答案,无需继续遍历
    }
    tmovew(d);
    //开始遍历旋转
    return;
}
inline void tmovew(int d){
    for(int i=0;i<=3;i++){
        for(int j=1;j<=i;j++){
            inf[d].spina();
        }
        //顺时针旋转相应次
        tmovex(d);
        //往下遍历横移
        for(int j=1;j<=i;j++){
            inf[d].spinb();
        }
        //逆时针转回去(回溯)
    }
    return;
}
inline void tmovex(int d){
    for(int i=0;i<=4;i++){
        int sum=0;
        //尽最大可能地往相应方向移动i次,sum记录实际上操作成功的次数,后面所有的sum都同理
        for(int j=1;j<=i;j++){
            if(inf[d].left()==true){
                sum++;
            }
        }
        //往左移动
        tmovey(d);
        //往下遍历竖移
        for(int j=1;j<=sum;j++){
            inf[d].right();
        }
        //往右移动,也就是回溯
    }
    for(int i=0;i<=4;i++){
        int sum=0;
        for(int j=1;j<=i;j++){
            if(inf[d].right()==true){
                sum++;
            }
        }
        //往右移动
        tmovey(d);
        //往下遍历竖移
        for(int j=1;j<=sum;j++){
            inf[d].left();
        }
        //往左移动,也就是回溯
    }
    return;
}
inline void tmovey(int d){
    for(int i=0;i<=4;i++){
        int sum=0;
        for(int j=1;j<=i;j++){
            if(inf[d].down()==true){
                sum++;
            }
        }
        //往下移动
        dfs(d+1);
        //往下递归
        for(int j=1;j<=sum;j++){
            inf[d].up();
        }
        //往上移动,也就是回溯
    }
    for(int i=0;i<=4;i++){
        int sum=0;
        for(int j=1;j<=i;j++){
            if(inf[d].up()==true){
                sum++;
            }
        }
        //往上移动
        dfs(d+1);
        //往下递归
        for(int j=1;j<=sum;j++){
            inf[d].down();
        }
        //往下移动,也就是回溯
    }
    return;
}

相关文章:

ABC322刷题记

ABC322刷题记 T1.A A - First ABC 2。 妥妥的简单题…… 用find函数做就行。&#xff08;如果不存在那个子串就返回-1&#xff0c;否则返回第一次出现位置&#xff09; 注意题目中编号是从1开始的。 时间复杂度&#xff1a;O(log(n))。find函数有一定代价&#xff0c;我记…...

visual studio的安装及scanf报错的解决

visual studio是一款很不错的c语言编译器 下载地址&#xff1a;官网 点击后跳转到以下界面 下滑后点击下载Vasual Sutdio&#xff0c;选择社区版即可 选择位置存放下载文件后&#xff0c;即可开始安装 安装时会稍微等一小会儿。然后会弹出这个窗口&#xff0c;我们选择安装位…...

React生命周期

React的生命周期主要是指React组件从创建到销毁的过程&#xff0c;包括三个阶段&#xff1a;挂载期&#xff08;实例化期&#xff09;、更新期&#xff08;存在期&#xff09;、卸载期&#xff08;销毁期&#xff09; 挂载期&#xff1a; constructor&#xff08;props&#…...

SpringBoot整合RocketMQ笔记

SpringBoot版本为2.3.12.Release RocketMQ对比kafka 学习链接 https://zhuanlan.zhihu.com/p/335216381 代码实战 https://www.cnblogs.com/RedOrange/p/17401238.html Centos安装rocketmq https://blog.csdn.net/chuige2013/article/details/123783612 RocketMQ详细配置与…...

【【萌新的RiscV学习之在写代码之前对于关键路径的分析-11】】

萌新的RiscV学习之在写代码之前对于关键路径的分析-11 首先我们最简单的control 模块 全分段 因为只有分段 &#xff0c; 分开使用之后 &#xff0c; 各个阶段的具体功能才会合理使用 就像是为了后续 “气泡” 赋值 为 0 还有单独比较前递这种 EX &#xff1a; ALUOP ALUSrc …...

A. Sequence with Digits

题目&#xff1a;样例&#xff1a; 输入 8 1 4 487 1 487 2 487 3 487 4 487 5 487 6 487 7输出 42 487 519 528 544 564 588 628 思路&#xff1a; 暴力模拟题&#xff0c;看这数据范围&#xff0c;有些人可能会被唬住&#xff0c;以为是高精度或者容易超时&#xff0c;实际上…...

gitlab配置webhook限制提交注释

一、打开gitlab相关配置项 vim /etc/gitlab/gitlab.rb gitlab_shell[custom_hooks_dir] "/etc/gitlab/custom_hooks" 二、创建相关文件夹 mkdir -p /etc/gitlab/custom_hooks mkdir -p /etc/gitlab/custom_hooks/post-receive.d mkdir -p /etc/gitlab/custom_h…...

蓝桥杯Python scratch C++选拔赛stema个人如何报名?

如果不会操作&#xff0c;可以微信makytony协助。...

Cesium实现动态旋转四棱锥(2023.9.11)

Cesium实现动态悬浮旋转四棱锥效果 2023.9.11 1、引言2、两种实现思路介绍2.1 思路一&#xff1a;添加已有的四棱锥&#xff08;金字塔&#xff09;模型实现&#xff08;简单但受限&#xff09;2.2 思路二&#xff1a;自定义四棱锥几何模型实现&#xff08;复杂且灵活&#xff…...

2023最新PS(photoshop)Win+Mac免费下载安装包及教程内置AI绘画-网盘下载

2023最新PS(photoshop)WinMac免费下载安装包及教程内置AI绘画-网盘下载 2023最新PS(photoshop)免费下载安装教程来咯&#xff5e; 「PhotoShop」全套&#xff0c;winmac&#xff1a; https://pan.quark.cn/s/9d8d8ef5c400#/list/share 所有版本都有 1&#xff0c;复制链接…...

【JAVA】为什么要使用封装以及如何封装

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 Java的封装指的是在一个类中将数据和方法进行封装&#xff0c;使其可以保护起来&#xff0c;只能在该类内部访问&#xff0c;而不允许外部直接访问和修改。这是Java面向对象编程的三…...

18.示例程序(编码器接口测速)

STM32标准库开发-各章节笔记-查阅传送门_Archie_IT的博客-CSDN博客https://blog.csdn.net/m0_61712829/article/details/132434192?spm1001.2014.3001.5501 main.c #include "stm32f10x.h" // Device header #include "Delay.h" #incl…...

【超详细】Fastjson 1.2.24 命令执行漏洞复现-JNDI简单实现反弹shell(CVE-2017-18349)

前言&#xff1a; 看了很多别人关于漏洞复现过程&#xff0c;很多博客过程简洁&#xff0c;有的过程过于复杂&#xff0c;比如看到写java代码&#xff0c;用javac进行编译等等。所以我想写出比较详细的漏洞复现过程。 一&#xff0c;漏洞介绍 1-1 fastjson是什么 fastjson是…...

【牛客网】JZ39 数组中出现次数超过一半的数字

题目 思路 思路1 将数组排序,再保证有结果的情况下,此时数组中间的数字就是想要的结果 思路2 在保证有结果的情况下,此时数组的的众数是数组长度的一半以上 所以我们可以通过抵消的做法来找到最终的结果 我们可以从头遍历这个数组,如果两个数不相同,则消去这两个数,最坏的…...

【Mysql】Lock wait timeout exceeded; try restarting transaction

出现这种问题通常是有事务长时间未提交导致的 可以使用以下sql 查询事务进程 然后通过 kill 线程ID 的方式 ,结束该事务 SELECTtrx_id AS 事务ID,trx_mysql_thread_id AS 线程ID,trx_state AS 事务状态,trx_started AS 开始时间,trx_tables_locked AS 锁定的表,trx_query AS …...

python生成中金所期权行权价

参考沪深300股指期权的合约表&#xff0c;写一个工具函数&#xff1a; 使用方法 def get_format_option_gap(value: float, deviation: int 0): # 根据中证1000指数获取点位"""根据标准的行权价&#xff0c;生成不同档位的期权列表&#xff0c;适合中金所:…...

CentOS7.9 安装postgresql

# 添加postgres账户 sudo groupadd postgres sudo useradd -g postgres postgres # 修改postgres账号密码 passwd postgres # 安装postgresql cd ~tar zxvf postgresql-15.3.tar.gz cd postgresql-15.3./configure --prefix/usr/local/pgsql --without-readlinemake -j4 …...

qt线程介绍

目录 介绍 线程类 QThread 方式1 方式2 案例 线程资源释放 介绍 qt为多线程提供了完美的支持&#xff0c;实现多线程一般是从从QTHread中继承定义自己的线程类&#xff0c;QT也提供了QMutexLocker,QwaitCondition等类实现线程同步&#xff0c;与Linux系统或C中的线程库类似…...

记一次用dataframe进行数据清理

总结一下dataframe读取数据库&#xff0c;以及整理数据的过程。分为三个部分&#xff1a;数据读取&#xff0c;数据整理以及数据写入。 1、数据读取 从csv读取读取数据&#xff0c;使用pandas读的read_csv函数&#xff0c;传入两个参数&#xff0c;分别是path文件路径&#x…...

《Jetpack Compose从入门到实战》 第二章 了解常用UI组件

目录 常用的基础组件文字组件图片组件按钮组件选择器组件对话框组件进度条组件 常用的布局组件布局Scaffold脚手架 列表 书附代码 Google的图标库 常用的基础组件 文字组件 Composable fun TestText() {Column(modifier Modifier.verticalScroll(state rememberScrollState…...

Vue3 引入使用 vant组件详解

目录 Vue3 引入使用 vant组件详解1.安装2.引入2.1 全局引入2.2 按需引入2.2.1 vite项目:vite.config.js2.2.2 Webpack项目&#xff1a;webpack.config.js2.2.3 配置在vue.config.js中 3.使用 Vue3 引入使用 vant组件详解 Vant是一个强大的移动端组件库&#xff0c;目前Vant 官…...

NOSQL Redis Ubuntu系列 常用的配置 及密码登录

查看Ubuntu 版本 uname -a 配置redis.conf 查看redis 是否安装成功 ps -ef | grep redis 查看redis 服务状态 service redis status 查看redis 默认安装的路径 whereis redis #sudo vim /etc/redis.conf redis 密码登录...

C语言解析GPS源数据

文章目录 一、GPS数据格式介绍二、GPS字段含义三、C语言解析数据代码3.1 解析每个字段数据3.2 解析定位数据 一、GPS数据格式介绍 GPS&#xff08;全球定位系统&#xff09;数据格式常见的是NMEA 0183格式&#xff0c;NMEA 0183格式是一种用于导航设备间传输数据的标准格式&am…...

【论文阅读】(CVPR2023)用于半监督医学图像分割的双向复制粘贴

目录 前言方法BCPMean-teacher and Traning StrategyPre-Training via Copy-PasteBidirectional Copy-Paste ImagesBidirectional Copy-Paste Supervisory Signals Loss FunctionTesting Phase 结论 先看这个图&#xff0c;感觉比较清晰。它整个的思路就是把有标签的图片和无标…...

[Linux 基础] 一篇带你了解linux权限问题

文章目录 1、Linux下的两种用户2、文件类型和访问权限&#xff08;事物属性&#xff09;2.1 Linux下的文件类型2.2 基本权限2.3 文件权限值的表示方法&#xff08;1&#xff09;字符表示方法&#xff08;2&#xff09;8进制数值表示方法 2.4 文件访问权限的相关设置方法(1) chm…...

FPGA project :HDMI

实验目标&#xff1a;驱动HdMI显示十色等宽彩条。 本实验的重点是&#xff1a; 1掌握TMDS通信协议。 2rgb565转rgb888。 3编写HDMI驱动程序。 4学会看流程图编写代码。 值得注意的事情 1注意数据与解析数据的信号&#xff08;比如传入的数据中0或者1的个数&#xff09;&…...

基于微信小程序的物流快递信息查询平台同城急送小程序(亮点:寄件、发票申请、在线聊天)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...

idea插件推荐

目录 一、插件安装方式 file->settings->plugins->macketplace 各个版本IDE插件界面略有不同&#xff0c;不一一赘述 二、常用插件 1、Background Image Plus 推荐指数&#xff1a;★★★★☆ 这款插件并不能直接提高你的开发效率&#xff0c;但是可以让你面对的ID…...

Arcgis快速计算NDVI

Arcgis快速计算NDVI 一、问题描述 如何使用Arcgis像ENVI一样波段计算NDVI的值&#xff0c;事实上&#xff0c;Arcgis更快速一些。 二、操作步骤 首先准备好影像 打开窗口-影像分析 点击左上角 点击确定 &#xff08;发现自己使用的遥感影像不对劲&#xff0c;是计算好了…...

SpringCloud Alibaba - 基于 FeignClient 整合 Sentinel,实现“线程隔离”和“熔断降级”

目录 一、FeignClient 整合 Sentinel 1.1、整合原因 1.2、实现步骤 1.2.1、修改 OrderService 中的 application.yml 文件 1.2.2、给 FeignClient 编写失败后的降级逻辑 二、线程隔离 2.1、线程隔离的两种方式 2.1.1、线程池隔离 2.1.2、信号量隔离&#xff08;Sentin…...

wordpress h5幻灯片/石家庄百度搜索引擎优化

edx安装好之后但是汉化就折腾了兄弟大半天的时间&#xff0c;没办法&#xff0c;谁让水平菜。 参考&#xff1a;https://github.com/edx/edx-platform/wiki/Internationalization-and-localization 1.transifex相关文件配置 edx 的反应和汉化都托管在https://www.transifex.com…...

站长seo综合查询/郑州纯手工seo

IaaS&#xff0c;PaaS&#xff0c;SaaS 的区别 阮一峰 2017-08-07 263标签&#xff1a; SaaS &#xff0c; PaaS &#xff0c; IAAS网络 &#xff0c; 云服务器越来越多的软件&#xff0c;开始采用云服务。 云服务只是一个统称&#xff0c;可以分成三大类。 IaaS&#xff1a;基…...

长沙专业的网站建设企业/百度app免费下载安装最新版

Java常用类型定义、转换及比较主要有以下三个方面&#xff1a; (一)Integer类型 1).定义 Integer anew Integer(int value); Integer anew Integer(String value); 2).转换 i.定义中就可以将int型和String型的转换为Integer型 ii. String类型转换为Integer型 Integer.vJava常用…...

广州代做网站/关键词优化公司哪家效果好

1修改出图方向Layout View 中&#xff0c;在空白区域点击鼠标右键。点击“Page and Print Setup”Orientation(方向)&#xff1a;Portrait——竖向Landscape——横向Ps.修改布局视图的外框大小也是在这里&#xff0c;Page——WidthHeight2一幅图包含多幅子图(1)新建空白地图文档…...

做兼职上哪个网站/免费网站服务器

本节的主要目的是对 u-boot 中 sdram 初始化部分的理解。 1. 相关部分代码&#xff1a; // 前边的代码设置时钟频率 200MHz&#xff0c;FCLK:HCLK:PCLK 1&#xff1a;2&#xff1a;4#define MEM_CTL_BASE 0x48000000ldr r0, MEM_CTL_BASEadr r1, sdram_configadd …...

wordpress科技网站模板/网站点击率查询

1. 原始字面量是干什么的 在 C11 中添加了定义原始字符串的字面量&#xff0c;定义方式为&#xff1a;R “xxx(原始字符串)xxx” 其中&#xff08;&#xff09;两边的字符串可以省略。 原始字面量 R 可以直接表示字符串的实际含义&#xff0c;而不需要额外对字符串做转译或连接…...