当前位置:网站首页>HNUCM 2022年暑假ACM搜索专项练习
HNUCM 2022年暑假ACM搜索专项练习
2022-08-03 23:28:00 【_rosy】
目录
您好中国
题目描述
小明一天突发奇想,随机生成了一个全部由大写字母组成的方阵。他惊奇地发现这个方阵中包含中国的英文单词“CHINA”。
他希望你能够编写一个程序,能够找出一个由大写字母组成的方阵中所有不同的“CHINA”,要“CHINA”求中五个字母要连续出现,方向可以是上、下、左、右中的任意一个。
例如在下面的4*4的方阵中就包含了两个不同的“CHINA”。一个是第1行第1列到第3列的“CHI”,加上第2行第3列的“N”以及第2行第2列的“A”组成的“CHINA”;还有一个是第1行第1列到第3列的“CHI”,加上第2行第3列的“N”以及第3行第3列的“A”。
CHIA
CANT
GRAC
BBDE
输入
单组输入,每个测试样例包含N+1行。
第1行为方阵的大小N(N<=30)。
第2行到第N+1行用于存储由大写字母组成的方阵,每一行包含N个大写字母。
输出
输出方阵中包含的不同的CHINA的个数。如果一个都没有找到,则输出0。
样例输入 Copy
4
CHIA
CANT
GRAC
BBDE
样例输出 Copy
2
唯一值得注意的就是从字符为‘C’的位置开始dfs,其他的没啥
#include<iostream>
#include<string>
#include<math.h>
#include<algorithm>
#include<map>
#include<set>
#include<string.h>
#include<queue>
using namespace std;
int n,cnt;
char c[31][31];
string str="CHINA";
int vis[35][35];
void dfs(int x,int y,int t){
if(x<0||x>=n||y<0||y>=n)return;
if(t>=5){
cnt++;
return ;
}
if(c[x+1][y]==str[t]){
vis[x+1][y]=1;
dfs(x+1,y,t+1);
vis[x+1][y]=0;
}
if(c[x-1][y]==str[t]){
vis[x-1][y]=1;
dfs(x-1,y,t+1);
vis[x-1][y]=0;
}
if(c[x][y+1]==str[t]){
vis[x][y+1]=1;
dfs(x,y+1,t+1);
vis[x][y+1]=0;
}
if(c[x][y-1]==str[t]){
vis[x][y-1]=1;
dfs(x,y-1,t+1);
vis[x][y-1]=0;
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(c[i][j]=='C'){//从开始位置为C开始dfs
vis[i][j]=1;
dfs(i,j,1);
vis[i][j]=0;
}
}
}
cout<<cnt<<endl;
}
简单迷宫题
题目描述
众多单机小游戏中都有王子救公主的情节,小波也脑补了一个迷宫游戏。现有一大小为n*m二维迷宫,告诉你王子和公主的位置,小波觉得没有点实力是不配当王子的,于是王子每次可以向他的八个方向走一步(即:上、下、左、右、左上、左下、右上、右下)。迷宫中存在一些墙壁(用'#'表示),同时还存在一些陷阱(用'*'表示,在这个游戏中,保证王子能够快速的发现陷阱并绕开,具体见样例),正常可以行走的路用'.'表示,王子的位置用'S'表示,公主的位置用'E'表示。现问你王子有多少条路可以营救公主(当然王子足够聪明,不会回头路)。
输入
第一行,迷宫的大小n、m(n,m<=100)。
接下来输入整个地图。
输出
一行,表示王子有多少种路线可以营救公主。
样例输入 Copy
3 3 *.S *.. *E#
样例输出 Copy
10
#include <bits/stdc++.h>
using namespace std;
char c[105][105];
int vis[105][105];
int dx,dy,cnt,n,m;
int dirx[]={-1,1,0,0,-1,-1,1,1};//在x轴方向上的移动,配合diry使用
int diry[]={0,0,-1,1,-1,1,1,-1};//在y轴上的方向移动
void dfs(int x,int y){
if(x<0||x>=n||y<0||y>=m)return;//溢出直接返回
if(x==dx&&y==dy){//当前点为公主所在点时方案数加1
cnt++;
return;
}
for(int i=0;i<=7;i++){//8个方向遍历
if(c[x+dirx[i]][y+diry[i]]!='*'&&c[x+dirx[i]][y+diry[i]]!='#'&&vis[x+dirx[i]][y+diry[i]]==0){
vis[x+dirx[i]][y+diry[i]]=1;
dfs(x+dirx[i],y+diry[i]);
vis[x+dirx[i]][y+diry[i]]=0;//使用完记得还原
}
}
}
int main(){
cin>>n>>m;
int x,y;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
if(c[i][j]=='S'){//标记王子位置
x=i,y=j;
}
else if(c[i][j]=='E'){//标记公主位置
dx=i,dy=j;
}
}
}
vis[x][y]=1;//这里王子刚开始的位置也一定要标记,不然可能会走回头路
dfs(x,y);
cout<<cnt<<endl;
return 0;
}
小B旅游
题目描述
输入
输出
样例输入 Copy
4 4 2 1 2 1 3 2 3 3 4
样例输出 Copy
4
提示
数据规模:
1<=N<=100000,1<=M<=5000000,1<=P<=10000
#include <bits/stdc++.h>
using namespace std;
int n,m,p;
set<int>se;//用来保存走过的城市数,去重
struct node{
int x,step;
};
vector<int> ve[100005];//表示两个城市的联通信
int vis[100005];//表示是否访问过
void bfs(){
queue<node> q;
node now,next;//当前点和下一个要访问的点
now.x=1,now.step=0;
vis[1]=1;
q.push(now);
while(!q.empty()){
now=q.front(),q.pop();
for(int i=0;i<ve[now.x].size();++i){//bfs一层一层访问,
//ve[now.x].size()表示now.x可以到达哪个城市,也就是和哪个城市是连通的
next.x=ve[now.x][i],next.step=now.step+1;
if(vis[next.x]==0&&next.step<=p){
se.insert(next.x);
vis[next.x]=1;
q.push(next);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m>>p;
for(int i=1;i<=m;++i){
int a,b;
cin>>a>>b;
ve[a].push_back(b);
ve[b].push_back(a);
}
se.insert(1);//以1开始,因为为0是也可以到达自己,
//但是就无法进入dfs的next.step=now.step+1; if判断条件
bfs();
printf("%d\n",se.size());
return 0;
}
边栏推荐
- Creo 9.0二维草图的诊断:加亮开放端点
- 牛客2022 暑期多校3 H Hacker(SAM + 线段树查询区间内部最大子段和)
- BMN: Boundary-Matching Network for Temporal Action Proposal Generation Reading Notes
- 举一个 web worker 的例子
- Creo 9.0二维草图的诊断:重叠几何
- 最小化安装debian11
- 图论-虚拟节点分层建图
- 栈的压入、弹出序列
- 1067 Sort with Swap(0, i)
- ML's yellowbrick: A case of interpretability (threshold map) for LoR logistic regression model using yellowbrick based on whether Titanic was rescued or not based on the two-class prediction dataset
猜你喜欢
直播预告 | 构建业务智联,快速拥抱财务数字化转型
Another MySQL masterpiece published by Glacier (send the book at the end of the article)!!
【深度学习】基于tensorflow的服装图像分类训练(数据集:Fashion-MNIST)
智能座舱的「交互设计」大战
Creo9.0 绘制中心线
电子邮件安全或面临新威胁!
栈的压入、弹出序列
完全二叉树问题
超级完美版布局有快捷键,有背景置换
Code Casual Recording Notes_Dynamic Programming_416 Segmentation and Subsetting
随机推荐
RSS feeds WeChat public - feed43 asain
"Digital Economy Panorama White Paper" Financial Digital User Chapter released!
[RYU] rest_router.py source code analysis
用两个栈模拟队列
重发布实验报告
With the rise of concepts such as metaverse and web3.0, many digital forms such as digital people and digital scenes have begun to appear.
用两个栈模拟队列
软测人每个阶段的薪资待遇,快来康康你能拿多少?
[2022安恒夏令营] 5个小题
ML之yellowbrick:基于titanic泰坦尼克是否获救二分类预测数据集利用yellowbrick对LoR逻辑回归模型实现可解释性(阈值图)案例
2022/8/3 Exam Summary
超级完美版布局有快捷键,有背景置换(解决opencv 中文路径问题)
Analysys Analysis: The transaction scale of China's online retail B2C market in Q2 2022 will reach 2,344.47 billion yuan
禾匠编译错误记录
Super perfect version of the layout have shortcut, background replacement (solve the problem of opencv Chinese path)
Walk the Maze BFS
【论文阅读】TRO 2021: Fail-Safe Motion Planning for Online Verification of Autonomous Vehicles Using Conve
1067 Sort with Swap(0, i)
Redis persistence method
Take an example of a web worker