P2239螺旋矩阵
2024-10-06 03:13:02
看到这数据范围,显然咱不能暴力直接模拟(二维数组开不下,而且会T掉)
我们目前有两种选择:
1.优化暴力 走这边(jyy tql%%%)
2.数学做法
我们看一下题目中的那个矩阵
我们能不能找到些什么规律
由肉眼观察得
(1,1)=1
(n,n)=2*n-1
(1,n)=3*n-2
(2,1)=4*n-4
好像似乎有那么点规律
所以我们不妨把当前的矩阵分成4部分
i=1,ans=j
j=n,ans=2*n-1-(n-i)=n-1+i(这里可以理解为从(n,n)向上的(n-i)行的数)
i=n,ans=3*n+(j-1)=3*n-1-j(由(1,n)向右找(j-1)列)
j=1,ans=4*n-4-(i-2)=4*n-2+i(由(2,1)向下找(i-2)行)
如果给的i,j不在这些特殊位置呢?
那我们就把当前的矩阵扒掉最外边的皮,此时n-2,i-1, j-1,再看当前的i,j是否在新的矩阵的特殊位置,不在就继续扒,最后肯定会找到的。因为我们扒掉了矩阵的最外边,所以每扒一层,答案要加上4*(n-1)(n为当前的n)
这样我们就可以递归求解了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a,b;
int solve(int n,int i,int j)
{
if(i==)return j;
if(j==n)return n-+i;
if(i==n)return *n--j;
if(j==)return *(n-)-(i-);//懒得化简了qwq
return solve(n-,i-,j-)+(*n-);
}
int main()
{
scanf("%d%d%d",&n,&a,&b);
printf("%d",solve(n,a,b));
}
最新文章
- Quartz任务调度器
- [hihoCoder] 博弈游戏&#183;Nim游戏
- Yii2下拉框实现
- risc与cisc
- openerp学习笔记 跟踪状态,记录日志,发送消息
- Flex显示麦克风当前音量
- ubuntu service
- Hibernate学习笔记-Hibernate HQL查询
- 团队作业4——第一次项目冲刺(Alpha版本) Day3
- 修改文件系统属性chattr,查看文件系统属性lsattr
- Linux的基本命令(CentOS)
- Android SingleTask使用注意点
- MySQL 数据表创建及管理
- Application 、Cookie和 Session 两种会话有什么不同
- PMP学习总结(1) -- 引论
- Openvswitch手册(5): VLAN and Bonding
- valgrind简介以及在ARM上交叉编译运行【转】
- git merge dryrun
- GuidePage底部导航栏
- SSH原理和应用
热门文章
- 深度探索区块链/基于Gossip的P2P数据分发(4)
- UVA-10600.Contest and Blackout.(Kruskal + 次小生成树)
- Count Color poj2777 线段树
- Python 中的 os 模块常见方法?
- 二分查找---有序数组的 Single Element
- 20191119PHP.class类练习
- HTML使用框架跳转到指定的节
- Q开头的类找不到,无法加载插件:com.mysema.maven:apt-maven-plugin
- 四轴飞行器飞行原理与双闭环PID控制
- Linux性能优化从入门到实战:02 CPU篇:平均负载