CF748A Santa Claus and a Place in a Class 題解
阿新 • • 發佈:2021-12-21
CF748A Santa Claus and a Place in a Class 題解
。那麼,我們發現,聖誕老人此時的編號 \(s\) 就是 \(\left\lceil\dfrac{k}{2}\right\rceil\)。然後我們可以根據這個來求出列數和行數,分別是 \(\left\lceil\dfrac{s}{m}\right\rceil\),\(\begin{cases}m&m\mid s\\s\mod m&m\nmid s\end{cases}\)。
Content
聖誕老人坐在一個桌子被擺成 \(m\) 行 \(n\) 列的教室裡。每個桌子有兩個座位,每個位置從左往右都有編號,依次為 \(1,2,3,...,2\times n\times m\)。已知聖誕老人坐在編號為 \(k\) 的位置,求:
- 聖誕老人坐在第幾列第幾行。
- 聖誕老人的座位是在桌子的左邊還是右邊。
資料範圍:\(1\leqslant n,m\leqslant 10000,1\leqslant k\leqslant 2\times 10^8\)(\(2\times n\times m\) 的最大值)。
Solution
首先,我們可以求出聖誕老人在第幾列第幾行。
我們不妨把一個桌子看成一個集體,然後這樣編號:從第一列第一行開始,先從前往後,再從左往右,依次編號為 \(1,2,3,...,n\times m\)
至於在左在右的問題,那就更簡單了:如果 \(k\) 是奇數,那麼就應該坐在桌子的左邊,否則就應該坐在桌子的右邊。
Code
#include <cstdio> #include <algorithm> #include <cmath> #include <iostream> using namespace std; int n, m, k, mm, r, l; int main() { scanf("%d%d%d", &n, &m, &k); mm = (int)ceil(k / 2.0); r = (int)ceil(mm * 1.0 / m), l = (mm % (m + 1) + 1); printf("%d %d %c", r, l, (k % 2 ? 'L' : 'R')); }