列表

详情


NC237371. 小乐的房间

描述

        传说中,在这个世界上有平行空间,但是只有在某些特定的时间(六一),特定的位置(某辆刹车失灵且高速行驶的车前)才可以穿越平行空间的壁障,短暂地前往那未知の地。
非常Lucky的,在今天,你在群里一如既往地水群的时候,平时御車得当的群友竟一时没有收住jio,使得你成功来到了一个少年の床底。
        。。。。。
        六一这一天,熬夜打了一夜的小乐从睡梦中醒来,他发现他自己的房间天旋地转,分不清东西南北。非常慌张的小乐害怕地掏出手机,打开了游戏,看到游戏里的上下左右他还分得清,这下他才安下了心,原来是房间坏了。
        小乐的房间的俯视图是一个 米 × 米 的正方形,他只记得自己的的床在房间的西北角的角落当前的位置),但是他现在急需去房间的另外3个角落分别拿到耳机,充电线,雪碧 然后回到床上打游戏。不过已经分不清东南西北的他很难在杂乱的房间中走到想去的地方。
        在床下的你听得直摇头,决心挽救这个孩子的未来。所以你决定要先一步到达房间的其他角落,把那些东西替换成:”戴上就摘不下来的英语听力耳机“,“拿起就会开始锻炼的跳绳”,“喝一口就想敲代码的牛可乐”(一种可乐)。
        不过你也分不清东南西北,但是聪明的你早已看出了这个房间的一些端倪:
        1. 房间可以视为 × N 个空间组成的地图,每个空间都有一个唯一的编号(空间编号无规律但保证是N * N的排列)。
        2. 每个空间都可以往东南西北四个方向行走前往相邻的空间,但是你此时也东南西北不分,所以只知道每个空间可以前往哪四个编号的空间
        3. 当你到达房间边界并且再次面壁前进,会从房间的另外一边出来(见下图,红色位置向右移动会来到蓝色位置)
        
        4. 绿色位置是房间的西北角,它的空间编号为1(此图只做解释并不是真的房间
        

输入描述

第一行一个正整数n代表房间的边长(0 < n <= 1000)
从第二行开始,紧接着n * n行。每行4个正整数,第i - 1行代表编号为i的空间可以前往哪4个编号的相邻空间。(其中你当前所在空间编号为 1,处于整个房间西北角的角落。)

输出描述

输出多个位置的编号,以空格分隔,编号小的在前面,代表有可能是房间角落空间的编号

示例1

输入:

2
2 3 2 3
1 4 1 4
4 1 4 1
2 3 2 3

输出:

1 2 3 4

说明:

房间布局如下图,1234都是房间的角落
1 2
3 4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 924ms, 内存消耗: 19960K, 提交时间: 2022-06-03 11:20:32

#include<bits/stdc++.h>
using namespace std;
const int maxn=1001*1001;
int room[maxn][5];
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n*n;i++)
	{
		for(int j=1;j<=4;j++)
		{
			cin>>room[i][j];
		}
	}
	map<int,int> mp{{room[1][1],2},{room[1][2],2},{room[1][3],2},{room[1][4],2}};
	for(int i=1;i<=4;i++)
	{
		for(int j=1;j<=4;j++)
		{
			mp[room[room[1][i]][j]]++;
		}
	}
	for(auto &f: mp )
	{
		if(f.second>1)
		{
			cout<<f.first<<" ";
		}
	}
	return 0;
}

上一题