题目:
考虑直线上的一组点。两点 ii 和 jj 之间的距离是 |i−j||i−j| 。
如果集合中没有其他点 kk ,使得 jj 到 kk 的距离严格小于 jj 到 ii 的距离,那么集合中的点 ii 是最接近集合中的点 jj 的。换句话说,集合中所有其他点到 jj 的距离都大于或等于 |i−j||i−j| 。
例如,考虑一组点 {1,3,5,8}{1,3,5,8} :
- 对于点 1,最近的点是 3 (其他点的距离大于 3 )。(其他点的距离大于 |1−3|=2|1−3|=2 );
- 对于点 3 ,有两个最近点: 1 和 5 ;
- 对于点 5 ,最近的点是 3 (但不是 8 ,因为它的距离大于 |3−5||3−5| );
- 对于点 8 ,最近的点是 5 。
给你一组点。你必须在这个集合中加入一个整数的点,使它与集合中现有的每一个点不同,并且它成为与集合中每一个点**最近的点。这可能吗?
思路:
只有n==1 和 n == 2 的情况下,才能找到最近的点,如果n >= 3 ,那么三个点集合找不到插入一个整数,使得整数离每个点最近,故而判断条件中有n > 3 ,
当集合为连续的两个数字,例如,5, 6,那么,距离二者最近的点应该是5.5,题目要求整数,故而集合中两个数字不应该是连续的
代码:
#include<iostream>
using namespace std;
const int N = 45;
int n;
int a[N];
void solve() {
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i];
if (n < 3 && a[1] - a[0] > 1) {
puts("YES");
return;
}
puts("NO");
}
int main() {
int t;
cin >> t;
while(t--) {
solve();
}
return 0;
}
cf现在有点崩,等我重交一下看代码对不对,思路是这样的