• 螺旋的矩阵


    螺旋的矩阵
    Time Limit: 1000 MS Memory Limit: 32768 K
    Total Submit: 23(16 users) Total Accepted: 14(14 users) Rating: Special Judge: No
    Description

    给出一个奇数 n,我们可以把数字 1 到 n*n 放到一个螺旋的矩阵中。

    下图给出了从1到25的放法:

                1    2   3   4   5

               ---------------------

             1| 21  22  23   24  25

             2| 20   7   8    9  10

             3| 19   6   1    2  11

             4| 18   5   4    3  12

             5| 17  16  15   14  13

                 

    正如我们看到的,矩阵中的每个位置都对应一个唯一的整数,例如第一行第一列是一个21,第5行第2列是一个16。

    现在,给出一个整数 n(1<=n<=32768),和一个整数m(1<=m<=n*n),你需要输出整数 m的位置。

    Input

    第一行是一个整数T,表示数据的组数,接下来的T行每行两个整数n, m。

    Output

    第一行是一个整数T,表示数据的组数,接下来的T行每行两个整数n, m。

    Sample Input

    3

    3 9

    5 21

    5 16 

    Sample Output

    3

    3 9

    5 21

    5 16 

    Source
    2014.11.30新生赛-正式赛

     找规律,水。。。。

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long LONG;
    int main()
    {
        int T;
        while(~scanf("%d",&T))
        {
            while(T--)
            {
                LONG n,m;
                scanf("%ld%ld",&n,&m);
                LONG s=sqrt(m*1.0);
                LONG s1=s*s;
                LONG x,y;
                if(s%2==1)
                {
                    x=1+(n-s)/2,y=s+(n-s)/2;
                    if(s1==m)
                    {
                        printf("%ld %ld
    ",x,y);
                        continue;
                    }
                    y++;
                    s1++;
                    if(s1==m)
                    {
                        printf("%ld %ld
    ",x,y);
                        continue;
                    }
                    int i;
                    int key=0;
                    for(i=0;i<s;i++)
                    {
                        s1++;
                        x++;
                        if(s1==m)
                        {
                            key=1;
                            printf("%ld %ld
    ",x,y);
                            break;
                        }
                    }
                    if(key)
                    {
                        continue;
                    }
                    for(i=0;i<s;i++)
                    {
                        s1++;
                        y--;
                        if(s1==m)
                        {
                            printf("%ld %ld
    ",x,y);
                            break;
                        }
                    }
                }
                else
                {
                    x=n-(n-s)/2;
                    y=(n-s)/2+n%2+1;
                //    cout<<x<<" "<<y<<endl;
                    if(s1==m)
                    {
                        printf("%ld %ld
    ",x,y);
                        continue;
                    }
                    y--;
                    s1++;
                    if(s1==m)
                    {
                        printf("%ld %ld
    ",x,y);
                        continue;
                    }
                    int i;
                    int key=0;
                    for(i=0;i<s;i++)
                    {
                        x--;
                        s1++;
                        if(s1==m)
                        {
                            key=1;
                            printf("%ld %ld
    ",x,y);
                            break;
                        }
                    }
                    if(key)
                    {
                        continue;
                    }
                    for(i=0;i<s;i++)
                    {
                        y++;
                        s1++;
                        if(s1==m)
                        {
                            printf("%ld %ld
    ",x,y);
                            break;
                        }
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    java之认识基本数据类型及其封装类装箱和拆箱总结
    java之集合类特性对比分析列表
    <转>泛型的内部原理:类型擦除以及类型擦除带来的问题
    java之集合类框架的简要知识点:泛型的类型擦除
    java之方法覆盖的坑
    java入门概念个人理解之访问修饰符
    blog开篇
    卓越管理的实践技巧(4)如何才能给予有效的反馈 Guide to Giving Effective Feedback
    权限管理系统之组织管理
    卓越管理的实践技巧(3)推动团队管理的要点 Facilitation Essentials for Managers
  • 原文地址:https://www.cnblogs.com/beige1315402725/p/4926492.html
Copyright © 2020-2023  润新知