LG8467

题意(化简后):有一个长度为 \(5\) 的序列 \(a\),现给定 \(a_1\)\(a_2\)\(a_3\)\(a_4\),你需要判断是否存在 \(a_5\),使得在每个数只出现一次的情况下,有三个数为连续的正整数,且另外两个数相等。

看到题目,为了方便判断是否相邻,我们先对序列 \(a\) 排序。排好序后,我们要分两种情况讨论 \(a_5\) 的取值。

  • 有三个数为连续的正整数。

这样的情况就十分简单,直接令 \(a_5\) 等于剩下的一个数即可,有解。

  • 不存在三个连续的正整数,但有两个数相等。

这时候我们就要判断是哪两个数相等,并且看剩下的两个数的差(设为 \(k\))。分两种情况:

  1. \(k=1\) 那么说明这两个数相邻,那么令 \(a_5=\) 较大数 \(+1\) 或较小数 \(-1\),有解。

  2. \(k=2\) 说明这两个数中间还有一个正整数,令 \(a_5\) 等于这个正整数即可,有解。

\(k \ne 1\) 并且 \(k \ne 2\) 则无解。-

  • 其他情况则无解。

代码实现就十分简单了:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int T,a[5];
	cin>>T;
	while(T--)
	{
		cin>>a[1]>>a[2]>>a[3]>>a[4];
		sort(a+1,a+5);
		if((a[1]+1==a[2]&&a[3]-1==a[2])||(a[2]+1==a[3]&&a[4]-1==a[3])) cout<<1;
		else if(a[1]==a[2]&&(a[4]-a[3]==2||a[4]-a[3]==1)) cout<<1;	
		else if(a[2]==a[3]&&(a[4]-a[1]==2||a[4]-a[1]==1)) cout<<1;	
		else if(a[3]==a[4]&&(a[2]-a[1]==2||a[2]-a[1]==1)) cout<<1;	
		else cout<<0;
		cout<<endl;
	}
}
posted @ 2024-01-20 17:41  liyilang2021  阅读(2)  评论(0编辑  收藏  举报