比赛 |
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;
}