搜索测试题题解(3月21号总结)

目录

1.Shuffle'm Up

2.Pots

3.Open the Lock


1.Shuffle'm Up

样例

InputcopyOutputcopy
2
4
AHAH
HAHA
HHAAAAHH
3
CDE
CDE
EEDDCC
1 2
2 -1

题意:本题要求将s1和s2合并,再将合并的s分为s1和s2,知道s为我们需要得到的期望s,输出此时的洗牌次数。

思路:这里其实很好搜,只是v数组不好设置,这时可以使用STL大法,map<string,int>来记录这个结果是否出现过。

下面是AC代码:

#include<iostream>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
typedef struct{string x,y;int step;
}node;
int main()
{int t;cin>>t;for(int i=1;i<=t;i++){map<string,int>k;//这里map相当于一个vis数组使用 string a,b,c;int n;cin>>n;cin>>a>>b>>c;queue<node>q;node st;st.x=a;st.y=b;st.step=0;q.push(st);int f=0;while(!q.empty()){node h=q.front();q.pop();string pv;for(int i=0;i<n;i++){pv+=h.y[i];//按照要求合并 pv+=h.x[i];}if(pv==c){f=1;//找到目标次数 cout<<i<<" ";cout<<h.step+1<<"\n";//+1才是真正的洗牌次数 break;}if(k[pv]==0){k[pv]=1;node ed;ed.x="",ed.y="";for(int j=0;j<n;j++){ed.x+=pv[j];//s1要上部分 }for(int j=n;j<2*n;j++){ed.y+=pv[j];//s2要下部分 }ed.step=h.step+1;q.push(ed);}}if(!f)cout<<i<<" "<<-1<<"\n";}return 0;
}

2.Pots

示例

InputcopyOutputcopy
3 5 4
6
FILL(2)
POUR(2,1)
DROP(1)
POUR(2,1)
FILL(2)
POUR(2,1)

题意:这里需要我们进行操作,知道a或者b瓶子其中一个的水达到C升,并且输出需要进行多少次操作,并且输出操作的名称。

思路:因为只有ab两个瓶子,所以全部的操作只有6种,所以可以用6个if来判断是否push(当然可以用更加灵活的方法,只是本人想不出),v数组可以用当前ab瓶子里面的水升分别有多少。

下面是AC代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
typedef struct
{int capa,capb,step;string s[201];
}node;
int a,b,k;
int v[250][250];
int main()
{cin>>a>>b>>k;queue <node>q;node st;st.capa=0,st.capb=0,st.step=0;//初始状态 v[0][0]=1; q.push(st);int f=0;while(!q.empty()){node r=q.front();q.pop();if(r.capa==k||r.capb==k)//其中一个达到目标容量 {f=1;cout<<r.step<<"\n";for(int i=1;i<=r.step;i++){//输出记录的操作 cout<<r.s[i]<<"\n";}break;}if(!v[a][r.capb])//a瓶子的水装满 {v[a][r.capb]=1;node ed;for(int i=1;i<=r.step;i++){ed.s[i]=r.s[i];}ed.capa=a,ed.capb=r.capb,ed.step=r.step+1,ed.s[ed.step]="FILL(1)";q.push(ed);}if(!v[r.capa][b])//b瓶子的水装满{v[r.capa][b]=1;node ed;for(int i=1;i<=r.step;i++){ed.s[i]=r.s[i];}ed.capa=r.capa,ed.capb=b,ed.step=r.step+1,ed.s[ed.step]="FILL(2)";q.push(ed);}if(!v[0][r.capb])//a瓶子的水倒光 {v[0][r.capb]=1;node ed;for(int i=1;i<=r.step;i++){ed.s[i]=r.s[i];}ed.capa=0,ed.capb=r.capb,ed.step=r.step+1,ed.s[ed.step]="DROP(1)";q.push(ed);}if(!v[r.capa][0])//b瓶子的水倒光 {v[r.capa][0]=1;node ed;for(int i=1;i<=r.step;i++){ed.s[i]=r.s[i];}ed.capa=r.capa,ed.capb=0,ed.step=r.step+1,ed.s[ed.step]="DROP(2)";q.push(ed);}if(!v[max(r.capa-(b-r.capb),0)][min(r.capb+r.capa,b)])//a倒b {v[max(r.capa-(b-r.capb),0)][min(r.capb+r.capa,b)]=1;node ed;for(int i=1;i<=r.step;i++){ed.s[i]=r.s[i];}ed.capa=max(r.capa-(b-r.capb),0),ed.capb=min(r.capb+r.capa,b),ed.step=r.step+1,ed.s[ed.step]="POUR(1,2)";q.push(ed);}if(!v[min(r.capa+r.capb,a)][max(r.capb-(a-r.capa),0)])//b倒a {v[min(r.capa+r.capb,a)][max(r.capb-(a-r.capa),0)]=1;node ed;for(int i=1;i<=r.step;i++){ed.s[i]=r.s[i];}ed.capa=min(r.capa+r.capb,a),ed.capb=max(r.capb-(a-r.capa),0),ed.step=r.step+1,ed.s[ed.step]="POUR(2,1)";q.push(ed);}}if(!f){cout<<"impossible\n";}return 0;
} 

3.Open the Lock

样本

InputcopyOutputcopy
2
1234
21441111
9999
2
4

题意:给出两个数字串,将第一个数字串变为第二个数字串需要多少步骤。

思路:思路很简单,就是,每单个数字+1,-1或者与相邻的数字交换位置后的数字串分别入队,只是v数组用map来代替。

下面是AC代码:

#include<map>
#include<queue>
#include<iostream>
#include<string>
using namespace std;
struct node{string s;int step;
};
void solve()
{map<string,int>x;string a,b;cin>>a>>b;node st;st.s=a;st.step=0;queue<node>q;x[a]=1;q.push(st);while(!q.empty()){node k=q.front();q.pop();if(k.s==b){cout<<k.step<<"\n";return ;}for(int i=0;i<4;i++){//单个数字+1 string ts=k.s;if(ts[i]=='9') ts[i]='1';//特殊判断 else ts[i]+=1;if(x[ts]!=1){x[ts]=1;q.push({ts,k.step+1});}}for(int i=0;i<4;i++){//单个数字-1 string ts=k.s;if(ts[i]=='1') ts[i]='9';//特殊判断 else ts[i]-=1;if(x[ts]!=1){x[ts]=1;q.push({ts,k.step+1});}}for(int i=0;i<3;i++){//相邻数字交换 string ts=k.s;swap(ts[i],ts[i+1]);if(x[ts]!=1){x[ts]=1;q.push({ts,k.step+1});}}}
}
int main()
{int t;cin>>t;while(t--){solve();}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…

北航最新!基于条纹投影的半透明物体3D重建方法

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程&#xff1a;…

雷池 WAF 社区版:下一代 Web 应用防火墙的革新

黑客的挑战 智能语义分析算法&#xff1a; 黑客们常利用复杂技术进行攻击&#xff0c;但雷池社区版的智能语义分析算法能深入解析攻击本质&#xff0c;即使是最复杂的攻击手法也难以逃脱。 0day攻击防御&#xff1a; 传统防火墙难以防御未知攻击&#xff0c;但雷池社区版能有效…

01_Kubernetes基础

Kubernetes为什么叫K8S&#xff1a;因为K和S之间有8个字母 为什么需要K8S 对于云计算来说有自己的交互标准 Paas的下一代标准就是容器化&#xff0c;容器的集群化有没有很好的方案&#xff1f;有需求就会有产品&#xff0c;这个产品就叫做资源管理器。 首先是Apache的MESOS&…

LeetCode每日一题【206. 反转链表】

思路&#xff1a;双指针&#xff0c;一前一后&#xff0c;逐个把指向后面的指针指向前面。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), ne…

刷题训练之滑动窗口

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握滑动窗口算法&#xff0c;并且能把下面的…

又一个城市火了,媒介盒子盘点城市爆火原因

近日&#xff0c;“甘肃天水麻辣烫”在各大平台频频登上热搜榜&#xff0c;甘肃当地也及时接住了这泼天富贵&#xff0c;开通“麻辣烫专线”、机场高铁免费接、免费送门票等。这些措施似曾相识&#xff0c;因为在天水前&#xff0c;已经有淄博和哈尔滨这两个城市的案例可以供天…

【Linux】实现进度条小程序

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. 回车和换行3. 缓冲区4. 进度条4.1 倒计时设置4.2 进度条4.2.1 实现简单进度条4.2.2 进度条完善 5. 附进度条代码5.1 Processbar.h5.2 Processbar.c5.3 Main.c5.4 Makefile 1. 前言 在之前已经了解了 【Lin…

中文数字与阿拉伯数字:数字符号的文化交融

title: 中文数字与阿拉伯数字&#xff1a;数字符号的文化交融 date: 2024/3/21 17:46:31 updated: 2024/3/21 17:46:31 tags: 数字起源符号系统差异中文数字特点阿拉伯数字优势转换技术应用文化交流融合数字表达互通 中文数字与阿拉伯数字的关系起源&#xff1a; 中文数字是古…

硬盘、内存、缓存(CPU)和寄存器 空间大小与存取速度的区别及设计原理

一、寄存器和存储器是不同的 很多人会将 寄存器 与 存储器 二者混淆&#xff0c;认为它们是同一个东西。但并不是&#xff01;&#xff01; 寄存器是CPU上的一个模块 存储器是 内存硬盘的统称 二、存取速度的比较 CPU(包含寄存器&#xff0c;缓存) > 内存 > 硬盘 内…

代码学习第24天----回溯算法

随想录日记part24 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.10 主要内容&#xff1a;回溯算法在代码学习中尤其重要&#xff0c;所以今天继续加深对其的理解&#xff1a;1&#xff1a;递增子序列 &#xff1b;2.全排列 &#xff1b;3.全排列II 491.递…

C++ list详解及模拟实现

目录 本节目标 1. list的介绍及使用 1.2 list的使用 2.list的模拟实现 1.对list进行初步的实现 2.头插和任意位置的插入 3.pos节点的删除&#xff0c;头删&#xff0c;尾删 4.销毁list和析构函数 5.const迭代器 6.拷贝构造和赋值操作 3.完整代码 本节目标 1. list的…

如何在Ubuntu使用宝塔面板搭建hadsky轻论坛并发布到公网可随时访问

文章目录 推荐前言1. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3 Cpolar稳定隧道&#xff08;本地设置&#xff09;2.4 公网访问测试 总结 推荐 前些天发现了…

IP证书是什么?怎么申请?

IP证书&#xff0c;通俗来说&#xff0c;就像是专门给互联网上的一个门牌号码&#xff08;公网IP地址&#xff09;发放的“安全身份证”。这个证书主要是用来给那些通过IP地址直接访问的网站或服务提供HTTPS加密保护的。通常情况下&#xff0c;SSL证书是颁发给域名&#xff08;…

社交媒体的未来:探讨Facebook的发展趋势

引言 在数字化时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。作为全球最大的社交媒体平台之一&#xff0c;Facebook一直在不断地追求创新&#xff0c;以满足用户日益增长的需求和适应科技发展的变革。本文将探讨Facebook在未来发展中可能面临的挑战和应对…

模方软件匀色功能是灰色的不能点是什么原因?

问题如图 模方软件试用版没有匀色权限&#xff0c;正式版才可以用 。 下方链接有1个月的授权&#xff0c;有需要可以点开&#xff0c;软件正式版的可以使用匀色这个功能。https://item.jd.com/10037263088236.html

不会吧!不会吧!居然还有人不知道这个???

在2024年3月4日&#xff0c;由Anthropic推出了Claude3系列的大语言模型&#xff1a;该系列包括三种最先进的型号&#xff08;按功能升序排列&#xff09;&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。每个后续型号都提供越来越强大的性能&#xff0c;允许用…

用JDBC游标的方式导出mysql数据以及springboot打包成exe程序实践

用JDBC实现游标查询&#xff0c;关键代码在于 Statement 的 fetchSize 属性的设置。 ExportDataService import cn.hutool.core.io.FileUtil; import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvWriter; import cn.hutool.core.util.StrUtil; impo…

许战海战略文库|橋頭品牌突破区域局限打透全国市场的4个建议

自宣统元年(公元1908年)起&#xff0c;重庆南岸区海棠溪古石桥边诞生了一家传奇火锅店——桥头火锅。凭借深厚的文化底蕴和独特的风味&#xff0c;历经百年沉淀桥头火锅已成为南岸区乃至中华餐饮文化中的璀璨明珠。 桥头火锅不仅荣获了“中华老字号”和“中国名菜”两项殊荣&a…

生产者消费者模式

生产者消费者模式 如何用 BlockingQueue 实现生产者消费者模式如何用 Condition「条件变量」 实现生产者消费者模式如何用 wait/notify 实现生产者消费者模式扩展 生产者消费者模式&#xff0c;生产者消费者模式是多线程编程中非常常见的一种设计模式&#xff0c;它被用于解决生…