【题意】

已知:n,r,c(n<=30000)

条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动;如果前方是未曾经过的格子, 则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入 1, 2, 3, ... , n^2)

/*

如下图是一个 n = 4 时的螺旋矩阵:

1       2       3      4

12     13     14     5

11     16     15     6

10      9       8      7

求:n阶螺旋矩阵第r行第c列的值

【构思】

最常见的方法就是直接构造,时间复杂度O(n^2),在本题会超时;

那么就要化简运算:发现每层有4个转弯点,可以按转弯点转移,若(r,c)在其中则直接输出答案。

这样每层就只有4个点,时间复杂度为O(n)

【实现】

#include <cstdio>
#include <cstring>
#include <cstdlib>

using namespace std;

int cnt,n,x,y,rx,ry;

int main(void)
{
	freopen("test.in","r",stdin);
	scanf("%d%d%d",&n,&rx,&ry);
	for (int i=n-1;;i-=2)
	{
		x++,y++;
		if (x==rx&&y<=ry&&ry<=y+n-1)
		{
			printf("%d\n",cnt+ry-y+1);
			break;
		}
		cnt+=i;
		y+=i;
		if (y==ry&&x<=rx&&rx<=x+n-1)
		{
			printf("%d\n",cnt+rx-x+1);
			break;
		}
		cnt+=i;
		x+=i;
		if (x==rx&&ry<=y&&y-n+1<=ry)
		{
			printf("%d\n",cnt+y-ry+1);
			break;
		}
		cnt+=i;
		y-=i;
		if (y==ry&&rx<=x&&x-n+1<=rx)
		{
			printf("%d\n",cnt+x-rx+1);
			break;
		}
		cnt+=i;
		x-=i;
	}
	return 0;
}

【回顾】

1、构造类问题的解决方法    ①模拟   ②按照特殊点转移

2、构造类问题关键在于找出层次和特殊点


最新文章

  1. 【Java EE 学习 71 下】【数据采集系统第三天】【分析答案实体】【删除问题】【删除页面】【删除调查】【清除调查】【打开/关闭调查】
  2. HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
  3. EntityFrameWork使用过程问题总结
  4. 分享一个我的JavaScript版GridView多功能表格
  5. best matched pair
  6. Java集合——题目
  7. mark:如何使用FileZilla连接虚拟机上的Fedora
  8. Android 与 IIS服务器身份验证
  9. 使用javascript打开链接的多种方法
  10. ios 判断空字符串
  11. spring事物配置注意事项
  12. android 自定义百度地图放大缩小
  13. android——写xml
  14. Delphi2010生成GB2312字库乱码问题
  15. app耗电优化之二 使用电源管理来安排任务
  16. 201521123045 《Java程序设计》第2周学习总结
  17. Python——一个简单的类的创建和应用
  18. 使用rke快速安装K8s集群
  19. 如何解决failed to load the jni shared library问题
  20. swift 移除所有子控件

热门文章

  1. asp.net MVC4 lognet4 日志
  2. VirtualBox下Ubuntu利用桥接方式上网
  3. FZU 2146
  4. linux sudo apt-get用法详解
  5. Qt根据汉字生成位图,可连续调用,生成的位图不会有杂点
  6. Spring的&quot;Hello, world&quot;,还有&quot;拿来主义&quot;
  7. eclipse下添加viplugin插件的方法
  8. [SAP ABAP开发技术总结]OK_CODE
  9. CUBRID学习笔记 37 ADO.NET Schema Provider
  10. Socket&amp;GCDAsyncSocket(异步Socket)