生命不息,奋斗不止

题解 CF1560C 【Infinity Table】

2021-08-19 08:47:00


本题通过找规律就可以发现,表格第一列都是完全平方数。如图:

table

给您列了这么多或许显而易见了。 我们只要找到最小的比 $k$ 大的完全平方数 $p$ ,再一步步向 $k$ 推即可。 $p$ 的坐标为 $(\sqrt p,1)$ 。

#include<bits/stdc++.h>
#define debug cout << "Helloworld" << endl
using namespace std;

int main() {
    int n;
    cin >> n;
    for(long long i = 1; i <= n; i++) {
        long long p = 1, s;
        cin >> s;
        while(p * p < s) p++; //找到找到最小的比k(本程序写为s)大的完全平方数
        long long tmp = p * p; 
        long long ar = tmp - s + 1, x = 1, y = p; //ar:还需要移动多少步
        for(long long i = 1; i <= ar; i++) {
            if(i <= p) x++; //向右移
            else y--; //向上移
        }
        cout << y << " " << x - 1 << endl;
    }
    return 0;
}