螺旋的矩阵
2015-10-31 23:25
309 查看
螺旋的矩阵 | ||||||
| ||||||
Description | ||||||
给出一个奇数 n,我们可以把数字 1 到 n*n 放到一个螺旋的矩阵中。 下图给出了从1到25的放法: 1 2 3 4 5 --------------------- 1| 21 22 23 24 25 2| 20 7 8 9 10 3| 19 6 1 2 11 4| 18 5 4 3 12 5| 17 16 15 14 13 正如我们看到的,矩阵中的每个位置都对应一个唯一的整数,例如第一行第一列是一个21,第5行第2列是一个16。 现在,给出一个整数 n(1<=n<=32768),和一个整数m(1<=m<=n*n),你需要输出整数 m的位置。 | ||||||
Input | ||||||
第一行是一个整数T,表示数据的组数,接下来的T行每行两个整数n, m。 | ||||||
Output | ||||||
第一行是一个整数T,表示数据的组数,接下来的T行每行两个整数n, m。 | ||||||
Sample Input | ||||||
3 3 9 5 21 5 16 | ||||||
Sample Output | ||||||
3 3 9 5 21 5 16 | ||||||
Source | ||||||
2014.11.30新生赛-正式赛 |
#include<iostream> #include<algorithm> #include<cmath> using namespace std; typedef long LONG; int main() { int T; while(~scanf("%d",&T)) { while(T--) { LONG n,m; scanf("%ld%ld",&n,&m); LONG s=sqrt(m*1.0); LONG s1=s*s; LONG x,y; if(s%2==1) { x=1+(n-s)/2,y=s+(n-s)/2; if(s1==m) { printf("%ld %ld\n",x,y); continue; } y++; s1++; if(s1==m) { printf("%ld %ld\n",x,y); continue; } int i; int key=0; for(i=0;i<s;i++) { s1++; x++; if(s1==m) { key=1; printf("%ld %ld\n",x,y); break; } } if(key) { continue; } for(i=0;i<s;i++) { s1++; y--; if(s1==m) { printf("%ld %ld\n",x,y); break; } } } else { x=n-(n-s)/2; y=(n-s)/2+n%2+1; // cout<<x<<" "<<y<<endl; if(s1==m) { printf("%ld %ld\n",x,y); continue; } y--; s1++; if(s1==m) { printf("%ld %ld\n",x,y); continue; } int i; int key=0; for(i=0;i<s;i++) { x--; s1++; if(s1==m) { key=1; printf("%ld %ld\n",x,y); break; } } if(key) { continue; } for(i=0;i<s;i++) { y++; s1++; if(s1==m) { printf("%ld %ld\n",x,y); break; } } } } } return 0; }
相关文章推荐
- MOOC PTA 07-图5 Saving James Bond - Hard Version
- hdoj4722Good Numbers【找规律】
- ios 多线程
- 今天的学习和生活2015/10/31
- 热爱
- Scrum Meeting 10.31
- JS正则表达式验证账号、手机号、电话和邮箱
- java代理模式
- dede头部和导航连接的更改
- sync fsync fdatasync
- 英语让路---2015年10月英语月总
- 动态规划法之移位译码问题
- Java设计模式之单例模式(Singleton)在Android系统服务中的应用
- LightOJ - 1140 How Many Zeroes?(数位DP)
- 基本数据类型的使用
- springMVCs下载
- Kafka 学习笔记(4) - Consumer和Producer
- 网页性能管理详解
- [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
- 报文首部