当前位置: 代码迷 >> 综合 >> uva 10161 Ant on a Chessboard(蛇型矩阵)
  详细解决方案

uva 10161 Ant on a Chessboard(蛇型矩阵)

热度:11   发布时间:2023-11-06 19:09:38.0

题意:

从(1,1)点出发,逆时针,然后顺时针,一直循环绕矩阵,求给出的数字的坐标是多少。

思路:

暴力肯定是不行了,没有那么大的数组,所以只能找规律。注意到偶数行,奇数列的起始都是坐标的平方,这样通过计算与这些特殊点的距离,就可以计算出点的坐标。

#include<iostream>
#include<cmath>
#define eps 1e-6
using namespace std;
int main(){int n, m;while(scanf("%d",&n)&&n){m=pow(n,0.5)+eps;//	cout<<m<<endl;if(m*m==n) {if(m%2) printf("%d %d\n",1,m);else printf("%d %d\n",m,1);}else{int te=n-m*m;if(m%2){if(te<=m) printf("%d %d\n",te,m+1);else printf("%d %d\n",m+1,(m+1)*(m+1)-n+1);}else{if(te<=m) printf("%d %d\n",m+1,te);else printf("%d %d\n",(m+1)*(m+1)-n+1,m+1);}}}return 0;
}