2021牛客多校第二场 I——Penguins

R语言penguins数据集可视化 可通过宏包palmerpenguins::penguins获取数据, 记录的大量企鹅体征数据,特征如下: species, island, bill_length_mm,bill_depth_mm, flipper_length_mm, body_mass_g,sex,year每种类型企鹅的嘴峰长度的分布 每种类型企鹅的嘴峰长度的分布都像是正态分布每种类型企鹅的嘴峰长度的分布(分性别) 雄性的企鹅的嘴峰长度比雌性的企鹅的嘴峰长度 散点图分散比较均匀。嘴巴越长,嘴巴也会越厚的观点应该是错的每一个物种的体重是 阅读详情

题目大意

给你两个 20×2020 \times 2020×20 的地图,’#’ 代表不可走,’.‘代表可走。对于第一张图,你需要从右下角走到右上角,对于第二张图你需要从左下角走到左上角。注意,你是同时操控两个小人,他们左右方向相反,上下方向相同,如果走某个方向,有一个人下一步是不可走,那么他会停在原地。问你最少需要多少步两个人都走到终点,如果步数相同,输出操作顺序字典序最小的,最短步数,操作顺序,最后把走的路径上的点标位’A’

解题思路

我们将第二张图反转一下,这样我们方便一点。定义操作顺序 ‘D’, ‘L’, ‘R’, ‘U’,然后进行一个dfs就可以了,注意要记录路径

Code


#include <bits/stdc++.h>
#define ll long long
#define qc ios::sync_with_stdio(false); cin.tie(0);cout.tie(0)
#define fi first
#define se second
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define pb push_back
using namespace std;
const int MAXN = 2e5 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const ll mod = 1e9 + 7;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
int xx[4] = {1, 0, 0, -1};
int yy[4] = {0, -1, 1, 0};
int vis[22][22][22][22];
char mp1[22][22], mp2[22][22];
struct node{
	int x1, y1, x2, y2, d, t;
};
node path[22][22][22][22];
char mp[4] = {'D', 'L', 'R', 'U'};
bool check(int x1, int y1, int x2, int y2){
	if(!vis[x1][y1][x2][y2] && mp1[x1][y1] == '.' && mp2[x2][y2] == '.')
		return 1;
	return 0;
}
void solve(){
	for(int i = 1; i <= 20; i++)   {
		scanf("%s%s",mp1[i] + 1, mp2[i] + 1);
		reverse(mp2[i] + 1, mp2[i] + 21);
	}
	for (int i = 1; i <= 20; ++i){
		mp1[i][0] = mp1[i][21] = mp2[i][0] = mp2[i][21] = '#';
		mp1[0][i] = mp1[21][i] = mp2[0][i] = mp2[21][i] = '#';
	}
	queue<node> q;
	q.push(node{20, 20, 20, 20, -1, 0});
	vis[20][20][20][20] = 1;
	path[20][20][20][20] = node{20, 20, 20, 20, -1, 0};
	node anstmp;
	anstmp.t = inf;
	while(!q.empty()){
		node tmp = q.front();
		q.pop();
		// printf("%d %d %d %d\n", tmp.x1, tmp.y1, tmp.x2, tmp.y2);
		if(tmp.x1 == 1 && tmp.y1 == 20 && tmp.x2 == 1 && tmp.y2 == 20){
			vector<char> ans;
			node temp = tmp;
			while(temp.d != -1){
				ans.pb(mp[temp.d]);
				mp1[temp.x1][temp.y1] = 'A';
				mp2[temp.x2][temp.y2] = 'A';
				temp = path[temp.x1][temp.y1][temp.x2][temp.y2];
			}
			mp1[20][20] = mp2[20][20] = 'A';
			printf("%d\n", (int)ans.size());
			reverse(ans.begin(), ans.end());
			for(auto it : ans)
				putchar(it);
			printf("\n");
			for(int i = 1; i <= 20; i++){
				mp1[i][21] = mp2[i][21] = 0;
				reverse(mp2[i] + 1, mp2[i] + 21);
				printf("%s %s\n",mp1[i] + 1, mp2[i] + 1);
			}
			return ;
		}
		for(int i = 0; i < 4; i++){
			int dx1 = tmp.x1 + xx[i];
			int dy1 = tmp.y1 + yy[i];
			int dx2 = tmp.x2 + xx[i];
			int dy2 = tmp.y2 + yy[i];
			if(check(dx1, dy1, dx2, dy2)){
				vis[dx1][dy1][dx2][dy2] = 1;
				q.push(node{dx1, dy1, dx2, dy2, i, tmp.t + 1});
				path[dx1][dy1][dx2][dy2] = tmp;
			}
			if(check(dx1, dy1, tmp.x2, tmp.y2) && mp2[dx2][dy2] == '#'){
				vis[dx1][dy1][tmp.x2][tmp.y2] = 1;
				q.push(node{dx1, dy1, tmp.x2, tmp.y2, i, tmp.t + 1});
				path[dx1][dy1][tmp.x2][tmp.y2] = tmp;
			}
			if(check(tmp.x1, tmp.y1, dx2, dy2) && mp1[dx1][dy1] == '#'){
				vis[tmp.x1][tmp.y1][dx2][dy2] = 1;
				q.push(node{tmp.x1, tmp.y1, dx2, dy2, i, tmp.t + 1});
				path[tmp.x1][tmp.y1][dx2][dy2] = tmp;
			}
		}
	}

}

int main()
{
    #ifdef ONLINE_JUDGE
    #else
       freopen("in.txt", "r", stdin);
       freopen("out.txt", "w", stdout);
    #endif

    // qc;
    int T;
    // cin >> T;
    T = 1;
    while(T--){

        solve();
    }
    return 0;
}

从NVLINK到EthLink:GPU互联技术演进全解析(含最新行业趋势) 本文深入解析了从NVLINK到EthLink的GPU互联技术演进,重点剖析了Scale-up与Scale-out两种核心范式。文章详细对比了NVLINK、UALINK及革命性的EthLink技术,后者创新性地将以太网改造为支持Load/Store与RDMA双语义的高性能互联网络,旨在打破封闭生态,实现高性能与开放性的统一。最后,文章提供了技术选型指南并展望了未来以以太网为主导、语义融合的行业趋势。 阅读详情

相关推荐

从脑电到脑机接口:EEG/ERP特征如何驱动你的下一个智能硬件项目(Arduino/树莓派实战)

本文详细介绍了如何利用EEG/ERP特征提取技术驱动智能硬件项目,涵盖从脑电信号采集到脑机接口实现的完整流程。通过Arduino和树莓派实战,展示了P300、N400等事件相关电位的应用,帮助开发者将学术理论转化为可编程的交互指令,适用于智能家居、医疗辅助等领域。

weixin_29279047的博客 382

2021牛客暑假多校第二场 I题—Penguins

2021暑假牛客多校第二场 I题-Penguins 思路: 1.bfs 2.因为右边企鹅镜像,所以我们可以给他再镜像一下,这样就可以和左边企鹅同步上下左右了~ 3.代码里有很详尽注释哦~看不懂就给你吃逗筋拳 4.while(1)注意细节; (我注释里有我自己被坑到的细节点,大家可能不一样所以要千万小心呐!这两个小企鹅坏得很) 现在我们就开始看这两个小企鹅吧~ 题目描述: Lovely penguins is a tiny game in which the player controls two pengu

CLamb的博客 570

Linux 隐藏进程

这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。

chi's blog 2051

2021牛客多校二(补题)

I.Penguins 可爱的企鹅竟然都不配被讲~ 可恶啊 ~ 题意:问同时到给定点的最短路,并且输出他们的最短路径和行走方向~且两边的点都是镜像的 左右刚好是反的 思路:从学姐代码里学到的设立一个四维的dis的数组,然后写一个bfs按照字典序的顺序设立它的上下左右,加一个记录路径的数组,再回溯一下,然后随便搞一下,答案大概就出来啦~ #include<bits/stdc++.h> using namespace std; int INF = 0x3f3f3f3f; char mp1[25][25

伏地嘤嘤怪的博客 169

异步复位同步释放:如何确保复位信号的可靠性与时序安全

本文深入探讨了异步复位同步释放技术在数字电路设计中的关键作用,详细分析了复位信号的可靠性与时序安全问题。通过对比异步复位与同步复位的本质区别,揭示异步复位的优势与潜在风险,并提供了标准的Verilog实现方案。文章还涵盖了多时钟域下的复位同步策略、复位网络时序约束方法以及实际工程中的经验教训,为数字系统设计者提供了全面的复位信号处理指南。

weixin_29213655的博客 399

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

天天酷科研的博客 896

2021牛客多校#2 Penguins

原题链接 https://ac.nowcoder.com/acm/contest/11253/I 题目大意 玩家控制两只企鹅分别在两张20×2020\times2020×20的地图上行动。地图上有一些各自是墙壁,无法到达。当控制企鹅向墙壁或者边界移动时,这个操作会被忽略 现在同事控制两只企鹅移动,不过企鹅的移动时镜像的: ⋅L:左边的企鹅向左移动,右边的企鹅向右移动;·L:左边的企鹅向左移动,右边的企鹅向右移动;⋅L:左边的企鹅向左移动,右边的企鹅向右移动; ⋅R:左边的企鹅向右移动,右边的企鹅

G1801433197的博客 293

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 965

2021牛客暑期多校训练营2.I Penguins BFS广搜 简单

2021牛客暑期多校训练营2.I Penguins BFS广搜 简单 火车上没法写,来补题了… 链接:https://ac.nowcoder.com/acm/contest/11253/I 题目描述 Lovely penguins is a tiny game in which the player controls two penguins. The game holds in two 20×2020×2020×20 grids (the left one and the right one), and

HeartFireY的博客 589

【系统架构设计师-2025上半年真题】综合知识-参考答案及详解(75题完全回忆版)

【系统架构设计师-2025上半年真题】案例分析-参考答案及部分详解

数据知道的博客 1万+

国科大学习资料--机器学习方法与应用(叶齐祥)-期末考试题整理

国科大学习资料–机器学习方法与应用-期末考试题整理 ============================================================================================================================================================================================ =======================================

无名何许人的博客 2852

2021牛客暑期多校训练营2 I Penguins

题目大意: 给你两个20×20的图 左边图的企鹅要从点(20,20)走到(1,20) 右边图的企鹅要从点(20,1)走到(1,1) 有‘#’的地方不能走 两个企鹅走的时候要同时走并且走的左右方向是相反的 一个企鹅不能走的时候另一个企鹅可以走 走过的路径的符号变成A 让你输出最短的路径长度并且给出走的方案输出最后的图 思路: emmm就是广搜模拟题 但是一些条件看着还挺烦人的 看了几个人的代码仿写了一下感觉最好的那个 做个记录,以后再回来看看 #include <bits/stdc++.h> us

m0_53807008的博客 218

滚雪球学Java(01):Java是什么?| 入门指南

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

**My Coding Family** 626

2021牛客暑期多校(二)

2021牛客暑期多校(二)

qq_44873216的博客 875

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【2021牛客多校2】I-Penguins 搜索、BFS

2021牛客多校2-I I-Penguins 题目大意 一张地图被分成左右两部分,每部分的大小都是20×2020×2020×20 两只企鹅分别从 (19,19)(19, 19)(19,19) 和 (19,0)(19, 0)(19,0) 出发,要到达 (0,19)(0, 19)(0,19) 和 (0,0)(0, 0)(0,0) 企鹅的移动是受玩家控制的,但是两只企鹅的移动是左右镜像的 求最短路径的长度、路径、并在图中标记出来 若有多种路径,输出字典序最小的结果 Time : 1000 ms Memo.

CapriceH的博客 219

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2021牛客暑期多校训练营2-I(Penguins)

https://ac.nowcoder.com/acm/contest/11253/I 此题考点为bfs 建立一个4维度的vis数组标记当前状态是否访问过 用结构题对象保存当前状态和到当前状态的步数和成员数组保存到当前步数所经过的DLRU的操作。 对4个操作进行广搜,如果两个企鹅的当前操作都无效,则调过,如果有一个无效,则更新另一个的状态,否则更新两个的状态并加入对列,更新步数,更新当前步数的操作;到达目地后,更新地图并输出。 #include <queue> #include <iost

多思考🤔~ 592

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

2021牛客暑期多校训练营2

C题 Draw Grids ZYT and LBC decided to play a game. They will alternately do the following operation. Pick 4 integers a,b,c,da,b,c,da,b,c,d(1≤a1\leq a1≤a,c≤nc \leq nc≤n and 1≤b1\leq b1≤b,d≤md \leq md≤m) , where ∣a−c∣+∣b−d∣=1|a-c|+|b-d|=1∣a−c∣+∣b−d∣=1 , an

m0_51864047的博客 242

2021牛客暑期多校训练营2 I.Penguins

I.Penguins 题目大意: 在一个20∗4120*4120∗41的网格里有两只企鹅,一只位于(20,20)点最终要到达(1,20)点,另一只在(20,22)点最终要到达(1,22),两只企鹅在左右方向上做镜面运动,在上下方向上同上同下,如果企鹅的下一步遇到障碍或是边界,企鹅可以忽略这一步。 思路: 赛时调了好久没有调出来啊。。????补题又调了好久。。总而言之,思路很简单,利用bfs将整个图走一遍,将每一个点的上一个点进行保存,最后按照字典序入队即可。 #include<iostream&gt

lucifer1214的博客 208

2021牛客暑期多校训练营2(补题) 部分题解

题目链接:点这里 A.Draw Grids 题意 给定一个n×mn\times mn×m的点阵,两人轮流进行操作:每次在点阵中选出两个未连接的相邻的点进行连线,规定不能连出封闭图形。当操作者不能进行操作时则输。 解题思路 可以意识到不围成封闭图形的线段总数量等于点的总数-1,不妨设不围成封闭图形的线段总数量为n,则有: 当n%2=1n\%2 = 1n%2=1时,先手赢,否则后手赢。故此题易解。 #include<bits/stdc++.h> using namespace st.

pursuit的博客 530

2021牛客暑假多校训练#2 I.Penguins

//编译器级优化 // #pragma GCC optimize("O2") // #include <bits/stdc++.h> #include <string> #include <iostream> #include <vector> #include <queue> #include <stack> #include <map> #include <time.h> #include <cstr.

qq_46425472的博客 170

牛客多校联赛-I-Penguins

链接:https://ac.nowcoder.com/acm/contest/11253/I 来源:牛客网 Lovely penguins is a tiny game in which the player controls two penguins. The game holds in two 20 \times 2020×20 grids (the left one and the right one), and each has some blocked places. We number the

qq_52142857的博客 241

多校联赛2 Penguins

链接:https://ac.nowcoder.com/acm/contest/11253/I 来源:牛客网 Lovely penguins is a tiny game in which the player controls two penguins. The game holds in two20×2020 \times 2020×20grids (the left one and the right one), and each has some blocked places....

qq_51690312的博客 234

多校训练2 I Penguins BFS

找最短路径,采用bfs 要求输出最小字典序,则对路径搜索的方向顺序进行固定,保证D<L<R<U 在设置无效操作和四个方向时,要特别注意企鹅 1 和 2 的镜像性。 且注意题目的x, y(行、列)建立是x向上递减, y向左递减,x, y与四个操作的关系,D(1, 0), L(0,-1),R(0, 1),U(-1, 0)。 其余分析在代码注释中 accode: #include <bits/stdc++.h> using namespace std; #define endl "

erci_fc的博客 149

I-Penguins

链接:https://ac.nowcoder.com/acm/contest/11253/I 做法:最多可能状态只有20的4次方,即16w,所以直接bfs就行 需要注意的点是:当一边碰到障碍或边界,是不会移动的,所以可能只有一侧移动 #include<bits/stdc++.h> using namespace std; bool vis[22][22][22][22]; bool a[25][25]; bool b[25][25]; char c[25][25]; char d[25][25]

lanxing147的博客 137

【搜索】最小步数模型

最小步数模型 有三个点要思考: 1. 如何记录状态 2. 如何记录步数 3.如何标记 记录状态可以用int,string之类的,放到队列中 记录步数可以用 map 记录,标记的话当 mp.count() == 0 时代表未访问过。 八数码 AC代码(19MB): #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e5 + 10; string st, ed = "1234

ZhgDgE的博客 178

Walrus 与 Pudgy Penguins 达成合作,为 Web3 头部 IP 引入去中心化存储

Pudgy Penguins 携手 Walrus,带来更酷的存储方式。

Sui_Network的博客 1211
上一篇: 2021杭电多校第九场 1002——Just another board game
下一篇: 2021牛客多校第二场 J——Product of GCDs
Linda_yezi_coder
博客等级 码龄7年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值