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函数做就行。(如果不存在那个子串就返回-1,否则返回第一次出现位置) 注意题目中编号是从1开始的。 时间复杂度:O(log(n))。find函数有一定代价,我记…...
visual studio的安装及scanf报错的解决
visual studio是一款很不错的c语言编译器 下载地址:官网 点击后跳转到以下界面 下滑后点击下载Vasual Sutdio,选择社区版即可 选择位置存放下载文件后,即可开始安装 安装时会稍微等一小会儿。然后会弹出这个窗口,我们选择安装位…...
React生命周期
React的生命周期主要是指React组件从创建到销毁的过程,包括三个阶段:挂载期(实例化期)、更新期(存在期)、卸载期(销毁期) 挂载期: constructor(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 模块 全分段 因为只有分段 , 分开使用之后 , 各个阶段的具体功能才会合理使用 就像是为了后续 “气泡” 赋值 为 0 还有单独比较前递这种 EX : ALUOP ALUSrc …...
A. Sequence with Digits
题目:样例: 输入 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 思路: 暴力模拟题,看这数据范围,有些人可能会被唬住,以为是高精度或者容易超时,实际上…...
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个人如何报名?
如果不会操作,可以微信makytony协助。...
Cesium实现动态旋转四棱锥(2023.9.11)
Cesium实现动态悬浮旋转四棱锥效果 2023.9.11 1、引言2、两种实现思路介绍2.1 思路一:添加已有的四棱锥(金字塔)模型实现(简单但受限)2.2 思路二:自定义四棱锥几何模型实现(复杂且灵活ÿ…...
2023最新PS(photoshop)Win+Mac免费下载安装包及教程内置AI绘画-网盘下载
2023最新PS(photoshop)WinMac免费下载安装包及教程内置AI绘画-网盘下载 2023最新PS(photoshop)免费下载安装教程来咯~ 「PhotoShop」全套,winmac: https://pan.quark.cn/s/9d8d8ef5c400#/list/share 所有版本都有 1,复制链接…...
【JAVA】为什么要使用封装以及如何封装
个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访问和修改。这是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)
前言: 看了很多别人关于漏洞复现过程,很多博客过程简洁,有的过程过于复杂,比如看到写java代码,用javac进行编译等等。所以我想写出比较详细的漏洞复现过程。 一,漏洞介绍 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股指期权的合约表,写一个工具函数: 使用方法 def get_format_option_gap(value: float, deviation: int 0): # 根据中证1000指数获取点位"""根据标准的行权价,生成不同档位的期权列表,适合中金所:…...
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为多线程提供了完美的支持,实现多线程一般是从从QTHread中继承定义自己的线程类,QT也提供了QMutexLocker,QwaitCondition等类实现线程同步,与Linux系统或C中的线程库类似…...
记一次用dataframe进行数据清理
总结一下dataframe读取数据库,以及整理数据的过程。分为三个部分:数据读取,数据整理以及数据写入。 1、数据读取 从csv读取读取数据,使用pandas读的read_csv函数,传入两个参数,分别是path文件路径&#x…...
《Jetpack Compose从入门到实战》 第二章 了解常用UI组件
目录 常用的基础组件文字组件图片组件按钮组件选择器组件对话框组件进度条组件 常用的布局组件布局Scaffold脚手架 列表 书附代码 Google的图标库 常用的基础组件 文字组件 Composable fun TestText() {Column(modifier Modifier.verticalScroll(state rememberScrollState…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
