CF1506A Strange Table 题解

Content

给定一个 \(n\times m\) 的矩阵。一开始,\((1,1)\) 所在位置上面的数是 \(1\),随后先由上往下将这一列中的所有位置上面填上 \(2,3,\dots,n\),再依次对右边的所有列由上往下填上 \(n+1,n+2,\dots,2n,2n+1,2n+2\dots,3n,\dots,m\cdot n\)

现在改变一种填数方式。一开始 \((1,1)\) 所在位置上面的数还是 \(1\),随后先由左往右将这一行中的所有位置填上 \(2,3,\dots,m\),再依次对下面的所有行由左往右填上 \(m+1,m+2,\dots,2m,2m+1,2m+2\dots,3m,\dots,n\cdot m\)

给出 \(t\) 组数据,每组数据给定 \(n,m,x\) 三个正整数,你想知道以第一种方式填完数之后数 \(x\) 所在的位置在以第二种方式填完数之后会变成什么数字。

数据范围:\(1\leqslant t\leqslant 10^4\)\(1\leqslant n,m\leqslant 10^6\)\(1\leqslant x\leqslant n\times m\)

Solution

作为 Div. 3 的 A 题,这题目算是很签到的了。

我们不妨先把要求的位置所在的行和列算出来。不难想到,要求的位置所在行 \(a=\left\lceil\dfrac xn\right\rceil\),所在列 \(b=(x-1)\bmod n+1\)。然后我们发现,在当前所在行的前面已经填上了 \((a-1)\cdot m\) 个数,这一行要填 \(b\) 个数,所以答案就是 \((a-1)\cdot m+b=(\left\lceil\dfrac xn\right\rceil-1)\cdot m+(x-1)\bmod n+1\)

请注意本题要开 long long。

Code

int main() {
	MT {
		ll n = Rll, m = Rll, x = Rll;
		ll column = (int)ceil(x * 1.0 / n), row = (x - 1) % n + 1;
		printf("%lld\n", (row - 1) * m + column);
	}
    return 0;
}
posted @ 2021-12-15 22:18  Eason_AC  阅读(44)  评论(0)    收藏  举报