C. Infinity Table

思路:

由图可以发现,每行的开头都是当前行数得平方,所以对每个数据开根号后向上取整可获得当前是哪行(哪列)
接下来就求具体的坐标
不难发现n–>每个数据开根号向上取整
n * n = 确定的行/列
n * n - k 确定从这一行开头开始,
n * n - k >= n 在n列的x行确定坐标,坐标为 n - (n * n-k - n) - 1, n
n * n - k < n 在n行的x列确定坐标 坐标为 n, (n * n - k) + 1

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

typedef long long LL;
typedef pair<int, int>PII;

int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        LL k;
        cin >> k;
        //ceil(sqrt(k))是行(列)号
        LL n = ceil(sqrt(k));
        LL r = 0, c = 0;
        //判断行还是列:n * n - k ? n
        //n * n - k表示在这行开头往右多了几个数
        if (n * n - k >= n)//x行n列(多余n个数肯定就往上走了)
        {
            r = n - (n * n - k - n) - 1;
            c = n;
        }
        else//n行x列
        {
            r = n;
            c = n * n - k + 1;//往右多的数少于n个,有n * n - k个
        }

        cout << r <<   << c << endl;
    }

    return 0;
}

 

C. Infinity Table

上一篇:pip 直接安装tar.gz zip文件包 (windows linux mac 可用)


下一篇:Win8 搭建 Node.js 开发环境