sdut oj 1510 Contest02-4 Spiral
Contest02-4 Spiral
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
As we see above, each position in the spiral corresponds to a unique
integer. For example, the number in row 1, column 1 is 21, and integer
16 is in row 5, column 2. Now, given the odd number
n(1<=n<=32768), and an integer m(1<=m<=n*n), you should
write a program to find out the position of m.
输入
integer T(T<=20). T is the number of the test cases followed. Each
case consists of two integer n and m as described above.
输出
column number that the given integer is in, separated by a single
whitespace. Please note that the row and column number are both starting
from 1.
示例输入
3
3 9
5 21
5 16
示例输出
1 3
1 1
5 2 题目分析:输入t组,每组n代表是矩阵的行(==列), 再输入一个数m,输出该数在该矩阵的坐标(x, y)。
算法分析:
找规律 1.先计算出要找的那个数字在从中心往外的螺旋矩阵的第几层上
2.在该圈上的第几个位置,(先假设当前所在的圈是最外圈 )通过下标的变换移动过去
3.如果当前圈是最外圈就直接输出结果, 否则还要计算一下,此圈的外面还有几圈套着,x和y都要再加上套着的圈数输出 代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <math.h> using namespace std; int main()
{
int t;
int i, j;
int n; long long m;
int dd, ff;
int a, b;
int x, y; scanf("%d", &t);
while(t--)
{
scanf("%d %lld", &n, &m);
if( m==1 )
{ printf("%d %d\n",(n+1)/2,(n+1)/2 ); //如果m=1,输出矩阵中心的位置坐标
continue;
} for(i=1; i<=n; i++)
{
if( (i*2-1)*(i*2-1)>=m ) //这是找规律计算的结果,即是中心子矩阵的元素数和
{
break; //计算找到我们要找的那个数在第几圈上
}
}
dd=i; //dd保存我们要找的那个数在第几圈
ff=i-1;
a=(ff*2-1)*(ff*2-1); //计算内部矩阵的数字个数和
int len=m-a; // 计算从特定坐标开始移动的步数到达要到达的数字 b=(dd-1)*2; //一个板长,移动一个b的长度,坐标就要有一个元素转换方向
int cnt=0;
int cc;
while(cnt<len)
{
cc=0;
x=2; y=dd*2-1;
while(cnt<len && cc<b)
{
cnt++;
x++; //往下移动 y不变
cc++;
}
cc=0;
while(cnt<len && cc<b)
{
cnt++;
y--; //往左移动 x不变
cc++;
}
cc=0;
while(cnt<len && cc<b)
{
cnt++;
x--; //在向上移动 y不变
cc++;
}
cc=0;
while(cnt<len && cc<b)
{
cnt++;
y++; //在向右移动 x不变
cc++;
}
}
if(dd==((n+1)/2) )
printf("%d %d\n", x-1, y ); //此处计算的x有一步之差,没有处理bug,因为让x-1就等于正确的坐标
else
{
int kk;
kk=(n+1)/2;
kk=kk-dd;
printf("%d %d\n", x-1+kk, y+kk ); //如果该圈数不是最外圈,坐标加上外面的圈数。
}
}
return 0;
}
sdut oj 1510 Contest02-4 Spiral的更多相关文章
- SDUT OJ 2607
/*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/ 题目大意:给出一个字符串,求出里 ...
- SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )
亲和数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...
- SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )
图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...
- 九度OJ 1510 替换空格
题目地址:http://ac.jobdu.com/problem.php?pid=1510 题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We ...
- 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项
传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...
- SDUT OJ 2783 小P寻宝记
#include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...
- SDUT oj 3005 打怪升级(内存搜索)
当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要 ...
- SDUT OJ 2463 学校password你必须学会科学计划
#include<iostream> #include<string.h> #include<stdio.h> #define N 10010 #define M ...
- SDUT oj 2610
/*题目大意:输入一序列n个数字,然后输入m个询问,每个询问包含左边区间和右边区间,还有a和b,问你这个区间内有几个数大于等于a且小于等于b 做法:树状数组,先求出这个区间内有几个数小于a,然后求这个 ...
随机推荐
- 王室联邦(bzoj 1086)
Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...
- 标准C程序设计七---10
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- hdu4848 求到达每个点总时间最短(sum[d[i]])。
开始的时候是暴力dfs+剪枝,怎么也不行.后来参考他人思想: 先求出每个点之间的最短路(这样预处理之后的搜索就可以判重返回了),截肢还是关键:1最优性剪枝(尽量最优:目前的状态+预计还有的最小时间&g ...
- spring data jpa使用原生sql查询
spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...
- [BOI2007] Mokia
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...
- TraceTool 跟踪工具的瑞士军刀(C++版使用)
TraceTool查看器能够显示多种类型的来源(从提供的框架.日志文件.事件日志.或者OutputDebugString方法).一个简单而强大的client框架发送简单的跟踪,分组跟踪.类和对象浏览器 ...
- c++中vector向量几种情况的总结(向量指针,指针的向量)
1.标准库vector类型 vector 是同一种类型的对象的集合.每一个对象都有一个相应的整数索引值.标准库将负责管理与存储元素相关的内存.我们把 vector 称为容器,是由于它能够包括其它对象. ...
- SQL ORDER BY 关键字
SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序. SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序. ORDER BY ...
- python实现QQ机器人(自己主动登录,获取群消息,发送群消息)
一次偶然的机会我看见了一个群里的一个QQ号总是依据你所发的消息自己主动回复,当时非常感觉到奇妙.我知道能够模拟登录站点,没想到居然也能模拟登录QQ,首先自己想到的就是怎样实现模拟登录PC端的QQ, 開 ...
- Go与C语言的互操作 cgo
http://tonybai.com/2012/09/26/interoperability-between-go-and-c/ // foo.h int count; void foo(); //f ...