博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP 普及组 2014 螺旋矩阵
阅读量:5256 次
发布时间:2019-06-14

本文共 1830 字,大约阅读时间需要 6 分钟。

 

题解:

  这道题挺有意思的,有点考思维吧。

  大体思路是用四个pair<int ,int >变量表示四个角的坐标。

  (1)每次判断所求点( i , j )是否在当前四个点所围城的正方框上。

  (2)如果在,遍历一遍这个框的所有点,输出结果。

  (3)如果不在,四个角往里缩,来到更小的正方框上,重复  (1) 过程

  具体细节看代码。

AC代码:

1 #include
2 using namespace std; 3 #define ll long long 4 #define P pair
5 6 int n,x,y; 7 P p[5]; 8 bool isSat(){
//判断点(x,y)是否在当前四个点所表示的正方框上 9 //满足其一即可判断在,具体为啥,画个图就明白了10 if(x == p[1].first || x == p[3].first || y == p[1].second || y == p[2].second)11 return true;12 return false;13 }14 bool isPos(P _p){
//判断当前来到的点是否为所求点(x,y)15 return x == _p.first && y == _p.second;16 }17 int main()18 {19 scanf("%d%d%d",&n,&x,&y);20 //存储四个角的坐标21 p[1]=P(1,1),p[2]=P(1,n);22 p[3]=P(n,1),p[4]=P(n,n);23 while(!isSat())//如果不在当前正方框上,正方框向内缩24 {25 p[1].first++,p[1].second++;26 p[2].first++,p[2].second--;27 p[3].first--,p[3].second++;28 p[4].first--,p[4].second--;29 }30 ll res=1;31 for(int i=2;i <= p[1].first;i++)32 res += 1ll*4*(n-2*i+3);33 while(p[1].second < p[2].second && !isPos(p[1]))//判断就(x,y)是否在正方框的上边34 p[1].second++,res++;35 if(isPos(p[1]))36 {37 printf("%lld\n",res);38 return 0;39 }40 41 while(p[2].first < p[4].first && !isPos(p[2]))//判断就(x,y)是否在正方框的右边42 p[2].first++,res++;43 if(isPos(p[2]))44 {45 printf("%lld\n",res);46 return 0;47 }48 49 while(p[4].second > p[3].second && !isPos(p[4]))//判断就(x,y)是否在正方框的下边50 p[4].second--,res++;51 if(isPos(p[4]))52 {53 printf("%lld\n",res);54 return 0;55 }56 57 while(!isPos(p[3]))//判断就(x,y)是否在正方框的左边58 p[3].first--,res++;59 printf("%lld\n",res);60 }
View Code

 

转载于:https://www.cnblogs.com/violet-acmer/p/9898753.html

你可能感兴趣的文章
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>