AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 校园
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

AcWing 691. 立方体IV    原题链接    简单

作者: 作者的头像   tianen ,  2022-06-24 11:46:22 ,  所有人可见 ,  阅读 14


0


思路

从 2 ~ s*s 一直遍历, 此时 当前值 比 前一个值 大1 ,满足一个条件,再通过元素下标判断其位置是否相连:
相连, 更新 步数, 最大步数,胜者房间
不相连,以当前房间为起点,重新记录步数

C++ 代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1007;

int g[N*N][2];//记录下标

int val, maxCnt;//最大值
int cnt, tval;//当前值

int T, s;

int main()
{
    cin >> T;

    for(int t = 1; t <= T; t++)
    {
        //初始:最初胜者为1号房间,步数为1
        tval = 1, val = 1, maxCnt = 1, cnt = 1;

        cin >> s;
        int tmp;
        for(int i = 1; i <= s; i++)
            for(int j = 1; j <= s; j++)
                cin >> tmp, g[tmp][0] = i, g[tmp][1] = j;//记录下标

        for(int i = 2; i <= s * s; i++)
        {
            if(abs(g[i][0] - g[i - 1][0]) + abs(g[i][1] - g[i - 1][1]) == 1)//连续的数 且 位置相连
            {
                cnt++;
                if(cnt > maxCnt)//更新
                {
                    maxCnt = cnt;
                    val = tval;
                }
            }
            else//连续的数 但 位置不相连
            {
                cnt = 1;//更新临时房间的步数
                tval = i;//以断点房间为起点
            }
        }

        cout << "Case #" << t << ": " << val << ' ' << maxCnt << endl;
    }

    return 0;
}

0 评论

你确定删除吗?

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息