题解:P2239 [NOIP2014 普及组] 螺旋矩阵

· · 题解

思路

这题一眼模拟。

定义四个方向,绕着圈一直往里转,每个地方的值都记下来最后输出即可。

参考代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,x,y;
    scanf("%d%d%d",&n,&x,&y);
    int rx=1,num=y;
    int shang=1,xia=n,zuo=1,you=n;//x、y在下一次绕圈时上下左右的边界值(可以理解为将要被蛇形填数的一圈的边界)
    bool fx=true;
    while(rx!=x){
        if(fx){
            if(you==y){
                num+=x-rx;
                break;
            }
        }
        else{
            if(zuo==y){
                num+=rx-x;
                break;
            }
        }
        if(fx){
            num+=(you-y+1)*2+xia-rx-2;
            rx=xia;
            you--;
            shang++;
        }
        else{
            num+=(y-zuo+1)*2+rx-shang-2;
            rx=shang;
            zuo++;
            xia--;
        }
        fx=!fx;
    }
    cout << num << endl;
    return 0;
}

本蒟蒻第一篇题解,求管理员大大过吧。