CF1506A怪表问题解释
CF1506A怪表问题解释
Content
给出一个\(n次m\)的矩阵。首先,将\ (1,1) \)所在位置上方的数字为\(1\),然后从上到下依次在该列的所有位置上填写\(2,3,\点,n \),再从上到下依次在右侧的所有列上填写\ (n 1,n 2,\点,2n)。
现在换一种填写数字的方式。首先\ (1,1) \)所在位置上方的数字仍然是\(1\),然后从左到右用\(2,3,\点,m\)填充该行中的所有位置,然后从左到右用\(m ^ 1,m ^ 2,\点,2m)填充以下所有行。
给定\(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=\ left \ l ceil \ d frac xn \ right \ r ceil \)和列\(b=(x-1)\bmod n 1\)中。然后,我们发现当前行前面已经填入了\((a-1)\cdot m\)的数字,而这一行应该填入\(b\)的数字,所以答案是\((a-1)\ cdot m b=(\ left \ l ceil \ d frac xn \ right \
请注意本题要开 long long。
Code
int main(){ 0
MT {
ll n=Rll,m=Rll,x=Rll
ll列=(int)ceil(x * 1.0/n),行=(x-1)% n 1;
printf('%lld\n ',(第- 1行)* m列);
}
返回0;
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147911.html