首页 > 其他分享 >AtCoder Beginner Contest 272 D Root M Leaper

AtCoder Beginner Contest 272 D Root M Leaper

时间:2022-10-09 10:46:24浏览次数:77  
标签:Leaper Beginner AtCoder int bfs maxn && include dis

Root M Leaper

\(bfs\) 模拟

先把能走的矩阵预处理出来,然后直接跑 \(bfs\)

要注意各种边界

#include <iostream>
#include <cstdio>
#include <array>
#include <queue>
using namespace std;
#define pii pair<int, int>
const int maxn = 410;
int dis[maxn * maxn];
int vis[maxn][maxn];
vector<pii>gra;
const int xi[4] = {-1, -1, 1, 1};
const int yi[4] = {1, -1, -1, 1};
int n, m;

bool check(int x, int y)
{
    return x >= 0 && x < n && y >= 0 && y < n && vis[x][y] == -1;
}

void bfs()
{
    queue<array<int, 3>>q;
    q.push({0, 0, 0});
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            vis[i][j] = -1;
    while(q.size())
    {
        auto [x, y, id] = q.front();
        q.pop();
        vis[x][y] = id;
        for(auto [xa, xb] : gra)
        {
            for(int k=0; k<4; k++)
            {
                int xx = x + xa * xi[k];
                int yy = y + xb * yi[k];
                if(check(xx, yy))
                {
                    vis[xx][yy] = id + 1;
                    q.push({xx, yy, id + 1});
                }
            }
        }
    }
}

int main()
{
    cin >> n >> m;
    for(int i=0; i<=n*n; i++) dis[i] = -1;
    for(int i=0; i<=n; i++) dis[i * i] = i;
    for(int i=0; i<=n; i++)
    {
        if(m - i * i < 0 || m - i * i > n * n || dis[m - i * i] == -1) continue;
        gra.push_back({i, dis[m - i * i]});
        gra.push_back({dis[m - i * i], i});
    }
    bfs();
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            if(j) cout << " ";
            cout << vis[i][j];
        }
        cout << "\n";
    }
    return 0;
}

标签:Leaper,Beginner,AtCoder,int,bfs,maxn,&&,include,dis
From: https://www.cnblogs.com/dgsvygd/p/16771314.html

相关文章

  • AtCoder Beginner Contest 271
    咕咕咕咕。E-SubsequencePath最短路问题变种,Dijkstra最短路改改就行了。AC代码//Problem:E-SubsequencePath//Contest:AtCoder-KYOCERAProgrammingC......
  • AtCoder Regular Contest 149
    ARC149A-RepdigitNumber符合条件的数一共只有\(9N\)个,随便怎么做都行。ACCodeARC149B-TwoLISSum这个操作相当于我们可以将\(A\)任意排列,然后对\(B\)进行......
  • AtCoder Regular Contest 149(持续更新)
    Preface最近国庆在外面玩的有点high啊,欠了一篇AT和两篇CF没写,今天先浅浅写一下这场当时10.2号在外面玩得有点晚了,到寝室刚好比赛开始,晚饭都没吃就开干了主要是C写的太久......
  • AtCoder Regular Contest 149
    A发现所有数字都相同的数一共只有\(10^6\)种,考虑枚举每种情况,关键在于如何判断一个数\(\bmodm\)是否为\(0\)。考虑\(9\bmod8=1\),而\(99\bmod8=(9\times10+9)\b......
  • AtCoder Beginner Contest 271
    AtCoderBeginnerContest271D-FlipandAdjust一共有\(N\)张牌,每一面都写着一个整数。卡\(i(1\lei\leN)\)前面写着整数\(a_i\),后面写着整数\(b_i\)。你可......
  • AtCoder Regular Contest 137 D
    一道很好的题目,运用了很多不同的技巧。结论1:枚举变换次数\(k\),若\(A_{i}\)对答案有贡献,当且仅当\(C_{n-i+k-1}^{k-1}\equiv1\mod2\)。首先我们可以统计\(A_{p}\)对......
  • Atcoder 题目选做
    ABC257G直接考虑\(\rmKMP\)的过程。\(\rmKMP\)可以帮助我们求出\(S\)的\(border\),并找到\(T\)中每一个位置能匹配上的\(S\)的最长前缀。那么我们就可以很......
  • 【合集】AtCoder 比赛题解
    PartAABCABC266(A-Ex)ABC267(A-G)ABC268(A-D)ABC269(A-F)ABC270(D-E)ABC271(C-F)PartBARCARC148(C)......
  • codeforces/AtCoder补题整理
    目录cf1738CEvenNumberAddicts(博弈/记忆化搜索)题意题解cf1739EResetKEdges(树,二分+贪心)题意题解cf1730DPrefixesandSuffixes(字符串,思维)题意题解cf1734DS......
  • AtCoder Beginner Contest 271
    AtCoderBeginnerContest271A-484558题意:把一个数转化为16进制map<int,char>mp;intmain(){ mp[10]='A'; mp[11]='B'; mp[12]='C'; mp[13]='D'; mp[......