传送

看到这数据范围,显然咱不能暴力直接模拟(二维数组开不下,而且会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));
}

最新文章

  1. Quartz任务调度器
  2. [hihoCoder] 博弈游戏&#183;Nim游戏
  3. Yii2下拉框实现
  4. risc与cisc
  5. openerp学习笔记 跟踪状态,记录日志,发送消息
  6. Flex显示麦克风当前音量
  7. ubuntu service
  8. Hibernate学习笔记-Hibernate HQL查询
  9. 团队作业4——第一次项目冲刺(Alpha版本) Day3
  10. 修改文件系统属性chattr,查看文件系统属性lsattr
  11. Linux的基本命令(CentOS)
  12. Android SingleTask使用注意点
  13. MySQL 数据表创建及管理
  14. Application 、Cookie和 Session 两种会话有什么不同
  15. PMP学习总结(1) -- 引论
  16. Openvswitch手册(5): VLAN and Bonding
  17. valgrind简介以及在ARM上交叉编译运行【转】
  18. git merge dryrun
  19. GuidePage底部导航栏
  20. SSH原理和应用

热门文章

  1. 深度探索区块链/基于Gossip的P2P数据分发(4)
  2. UVA-10600.Contest and Blackout.(Kruskal + 次小生成树)
  3. Count Color poj2777 线段树
  4. Python 中的 os 模块常见方法?
  5. 二分查找---有序数组的 Single Element
  6. 20191119PHP.class类练习
  7. HTML使用框架跳转到指定的节
  8. Q开头的类找不到,无法加载插件:com.mysema.maven:apt-maven-plugin
  9. 四轴飞行器飞行原理与双闭环PID控制
  10. Linux性能优化从入门到实战:02 CPU篇:平均负载