比赛 20140423 评测结果 AAAAAAAAAA
题目名称 螺旋方阵 最终得分 100
用户昵称 digital-T 运行时间 0.005 s
代码语言 C++ 内存使用 0.28 MiB
提交时间 2014-04-23 09:10:43
显示代码纯文本
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#define sqr(X) (X)*(X)
using namespace std;
const int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1};
int T,N,M;
int find_matrix(int k,int l,int r)
{
	if(l==r)return l;
	int mid=(l+r)/2;
	if(mid%2==0)mid++;
	if(sqr(mid)<k)
		return find_matrix(k,mid,r);
	if(mid==r)
		return l;
	return find_matrix(k,l,mid);
}
void work()
{
	scanf("%d%d",&N,&M);
	if(M==1){printf("%d %d\n",N/2+1,N/2+1);return;}
	int k=find_matrix(M,1,N);
	//printf("%d\n",k);
	M-=sqr(k);
	int x=N/2+1-k/2,y=N/2+1+k/2+1;
	M--;
	if(M<k)
	{
		x+=dx[0]*M;
		y+=dy[0]*M;
		printf("%d %d\n",x,y);
		return;
	}
	else
	{
		x+=dx[0]*k;
		y+=dy[0]*k;
		M-=k;
	}
	for(int i=1;i<4;i++)
	{
		if(M<=k+1)
		{
			x+=dx[i]*M;
			y+=dy[i]*M;
			printf("%d %d\n",x,y);
			return;
		}
		else
		{
			x+=dx[i]*(k+1);
			y+=dy[i]*(k+1);
			M-=(k+1);
		}
	}
}
int main()
{
	freopen("spiral.in","r",stdin);
	freopen("spiral.out","w",stdout);
	scanf("%d",&T);
	while(T--)
		work();
	return 0;
}