标签:le P8467 int 样例 Aya flag hline cr Round
甲(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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。