[10月考试] C
[10月考试] C
题目描述
一条街道上有 nnn 栋房屋(nnn 为偶数),每两栋房屋之间距离为 111。
编号为奇数的房子位于街道的一侧,从街道的开头到尽头编号为 111 到 n−1n-1n−1。
编号为偶数的房子位于街道的另一侧,从街道尽头到它的开头编号为 222 到 nnn。
小 A 站在街道的开头,与房屋 111 和房屋 nnn 距离为 111,与房屋 333 和房屋 n−2n-2n−2 距离为 222,以此类推。
求小 A 与编号为 mmm 的房屋的距离。
对于所有数据,1≤m≤n≤1061\leq m\leq n\leq 10^61≤m≤n≤106,nnn 为偶数。
输入格式
输入共 111 行 222 个正整数 n,mn,mn,m。
输出格式
输出共 111 行 111 个正整数,表示答案。
样例 #1
样例输入 #1
8 3
样例输出 #1
2
样例 #2
样例输入 #2
10 6
样例输出 #2
3
提示
对于所有数据,1≤m≤n≤1061\leq m\leq n\leq 10^61≤m≤n≤106,nnn 为偶数。
这道题目要求我们计算小 A 与指定编号 m
的房屋的距离。街道上的房屋编号按照奇偶排列,每两栋房屋之间的距离为 1。
题目分析
- 房屋排列规则:
- 奇数编号的房屋在街道的一侧,编号从
1
到n-1
(奇数),从街道开头到尽头。 - 偶数编号的房屋在街道的另一侧,编号从
2
到n
(偶数),从街道尽头到开头。
- 奇数编号的房屋在街道的一侧,编号从
- 位置关系:
- 小 A 站在街道的开头,距离每栋房屋的距离可以通过其编号来计算。
- 对于奇数编号的房屋
1, 3, 5, ..., n-1
,它们的位置分别是1, 2, 3, ..., n/2
。 - 对于偶数编号的房屋
2, 4, 6, ..., n
,它们的位置分别是n/2, n/2 - 1, ..., 1
。
- 计算距离:
- 对于编号为奇数的房屋
m
,其与小 A 的距离为((m + 1) / 2)
。 - 对于编号为偶数的房屋
m
,其与小 A 的距离为(n / 2 - m / 2)
。
- 对于编号为奇数的房屋
解题思路
- 对于给定的房屋编号
m
,根据其奇偶性,计算与小 A 的距离。 - 如果
m
是奇数,距离为((m + 1) / 2)
。 - 如果
m
是偶数,距离为(n / 2 - m / 2)
。
#include <iostream>
using namespace std;int main() {int n, m;cin >> n >> m;if (m % 2 == 1) {// 奇数编号的房屋cout << (m + 1) / 2 << endl;} else {// 偶数编号的房屋cout << n / 2 - m / 2 << endl;}return 0;
}
代码解析
- 输入读取:读取两个整数
n
和m
。 - 判断奇偶:通过
m % 2
判断房屋编号m
是奇数还是偶数。- 如果是奇数,输出
((m + 1) / 2)
,表示与小 A 的距离。 - 如果是偶数,输出
(n / 2 - m / 2)
,表示与小 A 的距离。
- 如果是奇数,输出
- 输出结果:输出计算出的结果。
时间复杂度
- 由于本题的计算只涉及到几次简单的加法、除法和取余操作,因此时间复杂度是
O(1)
。 - 这对于输入规模
n
和m
最大为10^6
是非常高效的。