记录编号 98555 评测结果 AAAAAAAAAA
题目名称 螺旋方阵 最终得分 100
用户昵称 GravatarDijkstra 是否通过 通过
代码语言 C++ 运行时间 0.013 s
提交时间 2014-04-23 19:13:33 内存使用 0.56 MiB
显示代码纯文本
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("spiral.in");
ofstream fout("spiral.out");
int N;
struct spiral
{
	int start;
	int end;
}F[32769];
void ANS(int a,int b)
{
	int n,x,y,i,j,f=0;
	for(i=1;;i+=2)if(b>=F[i].start&&b<=F[i].end){n=i;break;}
	x=a-(a-n)/2;
	y=1+(a-n)/2;
	j=1;
	f=0;
	for(i=F[n].end;i>=F[n].start;i--)
	{
		if(i==b){fout<<y<<" "<<x<<endl;return;}
		if(j==n){f++;f%=4;j=1;}
		if(f==0){x--;j++;}
		if(f==1){y++;j++;}
		if(f==2){x++;j++;}
		if(f==3){y--;j++;}
	}
}
int main()
{
	fin>>N;
	int i,a,b;
	F[1].start=F[1].end=1;
	for(i=3;i<=32767;i+=2)
	{
		F[i].start=(i-2)*(i-2)+1;
		F[i].end=i*i;
	}
	for(i=1;i<=N;i++)
	{
		fin>>a>>b;
		ANS(a,b);
	}
	return 0;
}