目录
题目:
题目描述:
在x轴上给你 n 个点的坐标(没有重叠),对于每一个点可以进行一次操作:
左移或者右移或者不动
使得最终所有点相邻且不重叠
思路:
因为不能重叠,所以当确定了中间某个点的坐标之后,其他点就都必须向这个点靠拢。也就是说,我的这些点中间最多可以空两个位置,如果多余两个空位,在题目要求的有限操作下,不可能将所有的点相邻。
所以我们至少需要开一个 cnt 存一下初始位置不连续的个数,如果最终 就表示可以通过操作满足题目要求,反之则不行。
思路有了,具体操作请看AC代码
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
int a[N];
int main()
{
std::ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
int n; cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
int cnt = 0;
for (int i = 2; i <= n; i++)
{
cnt += a[i] - a[i - 1] - 1;
if (cnt > 2)
break;
}
if (cnt > 2)
cout << "NO" << '\n';
else
cout << "YES" << '\n';
}
return 0;
}