脑洞脑洞 螺旋矩阵
来源:互联网 发布:分镜头制作软件 编辑:程序博客网 时间:2024/06/07 11:45
由内向外扩散的螺旋矩阵:
int getv(int x, int y, int n) //螺旋矩阵(由内向外扩散){ int t = (n - 1) | 1; if (x <= y) { int k = min(x, t - y); return (t - 2 * k) * (t - 2 * k - 1) + 1 + (x + y - 2 * k); } int k = min(y + 1, t - x) - 1; return (t - 2 * k) * (t - 2 * k - 1) + 1 - (x + y - 2 * k);}
由外向内的螺旋矩阵:
#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <map>#include <algorithm>using namespace std;#define pi acos(-1)#define endl '\n'#define srand() srand(time(0));#define me(x,y) memset(x,y,sizeof(x));#define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++)#define close() ios::sync_with_stdio(0); cin.tie(0);#define FOR(x,n,i) for(int i=x;i<=n;i++)#define FOr(x,n,i) for(int i=x;i<n;i++)#define W while#define sgn(x) ((x) < 0 ? -1 : (x) > 0)#define bug printf("***********\n");typedef long long LL;const int INF=0x3f3f3f3f;const LL LINF=0x3f3f3f3f3f3f3f3fLL;const int dx[]={-1,0,1,0,1,-1,-1,1};const int dy[]={0,1,0,-1,-1,1,-1,1};const int maxn=1000;const int maxx=1e7+100;const double EPS=1e-7;const int MOD=10000007;#define mod(x) ((x)%MOD);template<class T>inline T min(T a,T b,T c) { return min(min(a,b),c);}template<class T>inline T max(T a,T b,T c) { return max(max(a,b),c);}template<class T>inline T min(T a,T b,T c,T d) { return min(min(a,b),min(c,d));}template<class T>inline T max(T a,T b,T c,T d) { return max(max(a,b),max(c,d));}inline int Scan(){ int Res=0,ch,Flag=0; if((ch=getchar())=='-')Flag=1; else if(ch>='0' && ch<='9')Res=ch-'0'; while((ch=getchar())>='0'&&ch<='9')Res=Res*10+ch-'0'; return Flag ? -Res : Res;}//freopen( "in.txt" , "r" , stdin );//freopen( "data.out" , "w" , stdout );//cerr << "run time is " << clock() << endl;int n,x,y;int check(int x0,int y0){ if(x0==x&&y0==y) return 1; return 0;}void solve(){ while(~scanf("%d%d%d",&n,&x,&y)) { int tot=1,xx=1,yy=0,flag=0; int l=1,r=n,d=n,u=1; while(tot<n*n&&!flag) { while(yy<r) {++yy,++tot;if(check(xx,yy)) {flag=1;break;}}--r; if(flag) break; while(xx<d) {++xx,++tot;if(check(xx,yy)) {flag=1;break;}}--d; if(flag) break; while(yy>l) {--yy,++tot;if(check(xx,yy)) {flag=1;break;}}++l; if(flag) break; while(xx>u+1) {--xx,++tot;if(check(xx,yy)) {flag=1;break;}}++u; if(flag) break; } cout<<tot<<endl; }}int main(){ solve();}
阅读全文
0 0
- 脑洞脑洞 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵!
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵:)
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- 螺旋矩阵
- hiho一下 第160周 压缩字符串
- 2017技术学习目标
- Mysql问题:can't get hostname for your address
- ORA-01810格式代码出现两次
- 局域网访问IIS发布的网站
- 脑洞脑洞 螺旋矩阵
- IDEA的常见设置
- 1955-digit root
- 2.2.1—单链表—Add Two Numbers
- Gvoice iOS接入
- ubuntu16.04 Docker 安装
- Java线程小笔记
- 浅析JVM内存模型
- SecureCRT vim编辑器中光标消失