CF748A Santa Claus and a Place in a Class 题解
2024-09-01 15:57:02
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\)。那么,我们发现,圣诞老人此时的编号 \(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}\)。
至于在左在右的问题,那就更简单了:如果 \(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'));
}
最新文章
- Orcale 数据库客户端PL/SQL中文乱码的问题
- ELF动态链接
- Asp.Net MVC4 + Oracle + EasyUI 学习 第一章
- 最全的Resharper快捷键汇总
- OpenStack Networking overview
- Sqlite注入测试
- MSCRM 2011/2013 单点登录 实现
- 查看oracle 数据库的DBID
- JAVA正则表达式语法大全
- 显示推送数据到mq成功,但是mq管理器中消息数量没增长
- (转)iOS7人机界面设计规范 - 目录
- Python之qq邮件
- Ajax+Spring MVC实现跨域请求(JSONP)(转)
- linux 下vim中关于删除某段,某行,或者全部删除的命令 ZZ
- 2018-软工机试-A-西班牙馅饼
- 通过awk获取netstat命令中的进程号
- 剑指offer(57)二叉树的下一个节点
- latex之插入向量、图片、编号
- RGB与CMYK以及加色与减色
- 网站性能测试指标(QPS,TPS,吞吐量,响应时间)详解