题解:P14101 [ZJCPC 2017] Problem Preparation
题目传送门
有
数量要求:
至少两个难度为
相邻难度差限制:将难度从小到大排序后,相邻两题的难度差
特殊的:如果相邻两题中有一题是最难题(最大值),则它们之间的难度差没有限制。题目保证只有一个最难题。
解题步骤:
- 如果
n<10 或n>13 ,输出No。 - 找出最小值
minx,如果minx != 1,输出No。 - 统计难度为
1 的题目数量,如果少于2 ,输出No。 - 排序难度数组,从第
1 个到第n-1 个。如果s[i+1]不是最大值,s[i]不是最大值,且s[i+1]-s[i] <= 2,否则输出No。 - 全部通过,输出
Yes。
code:
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+5;
int T;
int main(){
cin>>T;
while(T--){
int n;
cin>>n;
int s[N];
for(int i=0;i<n;i++)
cin>>s[i];
if(n<10||n>13){
cout<<"No"<<endl;
continue;
}
int minx=s[0];
for(int i=1;i<n;i++)
minx=min(minx,s[i]);
if(minx!=1){
cout<<"No"<<endl;
continue;
}
int cnt=0;
for(int i=0;i<n;i++)
if(s[i]==1)
cnt++;
if(cnt<2){
cout<<"No"<<endl;
continue;
}
sort(s,s+n);
int maxx=s[n-1];
bool f=true;
for(int i=0;i<n-1;i++)
if(s[i+1]!=maxx&&s[i]!=maxx&&s[i+1]-s[i]>2){
f=false;
break;
}
cout<<(f?"Yes":"No")<<endl;
}
return 0;
}