水题一道!
注:本文为洛谷用户 zhangsenhao6728(也就是我)的题解,已提交成功。
解题思路
首先,我们先把给定的
m
m
m 个数从小到大排序,如果
m
i
n
n
>
t
1
minn>t_1
minn>t1 或
m
a
x
n
<
t
m
maxn<t_m
maxn<tm,那么这时候无论我们怎么加数字也不会正确了,直接输出 Incorrect
。
接下来考虑
m
i
n
n
=
t
1
minn=t_1
minn=t1 且
m
a
x
n
=
t
m
maxn=t_m
maxn=tm 的情况,这时候无论还能不能放数字都可以成立,所以这种情况直接输出 Correct
。
然后考虑 m i n n = t 1 minn=t_1 minn=t1 且 m a x n > t m maxn>t_m maxn>tm 的情况,这时候想要正确,必须在 t m t_m tm 后放一个与 m a x n maxn maxn 一样大的数字,所以这时候只有 n > m n>m n>m 时才能成立。 m i n n < t 1 minn<t_1 minn<t1 且 m a x n = t m maxn=t_m maxn=tm 时也是如此。
最后考虑 m i n n < t 1 minn<t_1 minn<t1 且 m a x n > t m maxn>t_m maxn>tm 的情况,这时需要在 t 1 t_1 t1 前放一个与 m i n n minn minn 一样大的数字,在 t m t_m tm 后放一个与 m a x n maxn maxn 一样大的数字才能成立,所以这时 n − m ≥ 2 n-m\ge2 n−m≥2 才能成立。
AC 代码
#include<bits/stdc++.h>
using namespace std;
int a[101];
int main(){
int n,m,maxn,minn;
cin>>n>>m>>minn>>maxn;
for(int i=1;i<=m;i++){
cin>>a[i];
}
sort(a+1,a+m+1);
if(minn>a[1]||maxn<a[m]){
cout<<"Incorrect";
return 0;
}
if(minn==a[1]){
if(maxn==a[m]){
cout<<"Correct";
return 0;
}else if(n>m){
cout<<"Correct";
return 0;
}else{
cout<<"Incorrect";
return 0;
}
}
if(maxn==a[m]){
if(minn==a[1]){
cout<<"Correct";
return 0;
}else if(n>m){
cout<<"Correct";
return 0;
}else{
cout<<"Incorrect";
return 0;
}
}
if(n-m>=2){
cout<<"Correct";
return 0;
}else{
cout<<"Incorrect";
return 0;
}
return 0;
}