题解: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;
}
本蒟蒻第一篇题解,求管理员大大过吧。