P8467 [Aya Round 1 B] 甲(one)
作者:互联网
甲(one)
题目描述
定义长度为 \(5\) 的序列 \(S\) 为「好的」,当且仅当存在长度为 \(5\) 的排列 \(P\),满足 \(S_{P_1}-1=S_{P_2}=S_{P_3}+1\) 且 \(S_{P_4}=S_{P_5}\)。现有一长度为 \(5\) 的整数序列 \(a\),满足 \(0\le a_i \le 9(1\le i \le 5)\)。其中 \(a_1 \sim a_4\) 给定。试判断是否存在 \(a_5\) 满足 \(a\) 为「好的」。
其中,长度为 \(5\) 的排列 \(P\),指的是一个长度为 \(5\) 的数列,其中 \(1,2,3,4,5\) 在这个数列中出现且只出现一次。
输入格式
本题含有多组数据。
- 第一行输入一个整数 \(T\) 代表数据组数。
- 接下来 \(T\) 行每行输入四个整数 \(a_1,a_2,a_3,a_4\)。表示一组数据。
输出格式
- 输出共 \(T\) 行。对于每组数据,若存在满足条件的 \(a_5\),输出 \(1\);否则输出 \(0\)。
样例 #1
样例输入 #1
5
3 2 8 4
1 2 3 4
1 9 4 9
1 0 0 1
0 0 4 2
样例输出 #1
1
1
0
0
1
提示
附加样例
- 样例 \(2\) 见下发文件中的 \(\text{one2.in/one2.ans}\)。该样例满足测试点 \(2\) 的限制。
- 样例 \(3\) 见下发文件中的 \(\text{one3.in/one3.ans}\)。该样例满足测试点 \(5\) 的限制。
样例解释
样例 #1
- 对于第 \(1\) 组数据,可以令 \(a_5=8\)。此时存在 \(P=\{2,1,4,5,3\}\),满足 \(a_{P_1}-1=a_{P_2}=a_{P_3}+1\) 且 \(a_{P_4}=a_{P_5}\)。故输出 \(1\)。
- 对于第 \(2\) 组数据,可以令 \(a_5=4\)。此时存在 \(P=\{1,2,3,4,5\}\),满足 \(a_{P_1}-1=a_{P_2}=a_{P_3}+1\) 且 \(a_{P_4}=a_{P_5}\)。故输出 \(1\)。
- 对于第 \(3\) 组数据,不存在可以使 \(a\) 为「好的」的 \(a_5\)。
数据范围
\[\def\arraystretch{1.5} \begin{array}{|c|c|c|} \hline \textbf{\text{测试点}} & \bm{{T\le}} & \textbf{\text{特殊性质}} \cr\hline 1 & 100 & \textbf{A} \cr\hline 2 & 100 & \textbf{B} \cr\hline 3 & 100 & - \cr\hline 4 & 1000 & - \cr\hline 5 & 10^5 & - \cr\hline \end{array} \]- 特殊性质 \(\bf A\):\(a_1=a_2=a_3=a_4\)。
- 特殊性质 \(\bf B\):\(a_1,a_2,a_3,a_4\) 互不相等。
对于 \(100\%\) 的数据,\(1\le T\le 10^5\),\(0\le a_i \le 9\)。
思路
首先读入四个数字,记录每一个数字的出现次数。
若某个数字重复出现则满足 $ S_{P_4} = S_{P_5} $ 的条件,标记 $ flag=1 $ ,并将这个数字出现的次数清零。
-
若 $ flag==1 $ :
-
则枚举 $ 1 $ 至 $ 8 $ 的数字 $ i $ ,判断 数字 $ i-1 $ 和 $ i $ , $ i+1 $ 是否有两个数出现过,若存在则标记 $ flag=2 $ 并退出循环 ,若 $ flag==1 $ 则输出 $ 0 $ 否则输出 $ 1 $。
-
若 $ flag==0 $ :
-
首先对四个数排序(按从小到大排序)。
-
若 $ a_1 = a_2 -1 , a_2 = a_3 -1 $ ,则最后一个数一定是 $ a_4 $ 。
-
若 $ a_2 = a_3 -1 , a_3 = a_4 -1 $ ,则最后一个数一定是 $ a_1 $ 。
-
否则输出 $ 0 $ 。
$ code $
#include<bits/stdc++.h>
using namespace std;
namespace Solve
{
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*f;
}
map < int , int > mp;
int T;
int a[6];
void work()
{
cin>>T;
while(T--)
{
mp.clear();
int flag=0,ans;
for(int i=1; i<=4; i++)
{
cin>>a[i];
mp[a[i]]++;
if(mp[a[i]]==2)
{
flag=1;
mp[a[i]]=0;
}
}
if(flag==1)
{
for(int i=1; i<9; i++)
{
if(mp[i-1]+mp[i]+mp[i+1]==2)
{
flag=2;
cout<<1<<endl;
break;
}
}
if(flag==1)cout<<0<<endl;
}
else
{
sort(a+1,a+4+1);
if(a[1]+1==a[2]&&a[2]==a[3]-1)
{
cout<<1<<endl;
}
else
if(a[2]+1==a[3]&&a[3]==a[4]-1)
{
cout<<1<<endl;
}
else cout<<0<<endl;
}
}
}
}
int main()
{
Solve::work();
}
标签:le,P8467,int,样例,Aya,flag,hline,cr,Round 来源: https://www.cnblogs.com/dadidididi/p/16559925.html