NOIP 2014 普及组 T3 螺旋矩阵
来源:互联网 发布:我的淘宝如何换帐号 编辑:程序博客网 时间:2024/06/06 05:22
【题意】
已知: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、构造类问题关键在于找出层次和特殊点
0 0
- NOIP 2014 普及组 T3 螺旋矩阵
- [普及]NOIP 2014 螺旋矩阵
- NOIP2014(普及组)T3 螺旋矩阵
- NOIP 2008 普及组 T3
- [noip 2017]普及组 T3
- NOIP 2014 螺旋矩阵
- NOIP 2014 普及组 T4 子矩阵
- 2014NOIP普及组 子矩阵
- [普及] NOIP 2014 子矩阵
- NOIP2014普及组--螺旋矩阵(模拟)
- NOIP 2015 T3 普及组 求和 公式分解+线扫
- 2017.03.18【NOIP 普及组】模拟赛C组 T3:单元格
- JZOJ1491.2017.04.02【NOIP 普及组】模拟赛C组 T3打鼹鼠
- JZOJsenior2434.2017.04.08【NOIP 普及组】模拟赛C组 T3开关灯泡
- 【codevs 5131】[NOIP普及组 2015 T3]求和(递推)
- NOIP2015普及组 T3 求和
- NOIP2015(普及组)T3 求和
- [NOIP2017普及组]T3棋盘
- 按键精灵点击模板
- NOIP 2014 普及组 T2 比例化简
- Linux电源管理系统架构和驱动(1)-Linux电源管理全局架构
- 【POJ 3608】Bridge Across Islands
- 关于DNS负载均衡技术
- NOIP 2014 普及组 T3 螺旋矩阵
- uva 10003 Cutting Sticks
- NOIP 2014 普及组 T4 子矩阵
- Code[VS] 1021 玛丽卡 题解
- Code[VS] 1022 覆盖
- 图论——最短路径
- sicily_1012 (计算几何)
- Code[VS] 1090 加分二叉树
- C语言指针系列四——指针与函数