题解:P14101 [ZJCPC 2017] Problem Preparation
题目大意
有
-
题目的数量要是
10 \sim 13 (包括10 和13 ) -
最简单的题目难度为
1 。 -
难度为
1 的题目至少有2 道。 -
排序后,相邻的两道题目难度差不能大于
2 (不包含最难的题目)。
题解
直接按照题意模拟即可,第二项和第三项可以合并,排序之后判断第一个和第二个是不是
代码
//请读者自行跳转137行
#include <bits/stdc++.h>
#define For(i,x,y) for(ll i = x; i <= y; ++ i)
#define Down(i,x,y) for(ll i = x; i >= y; -- i)
#define gc() getchar()
#define pc(ch) putchar(ch)
#define MP(x, y) std::make_pair((x), (y))
typedef long long ll;
typedef double db;
const ll inf = 0x3f3f3f3f3f3f3f3f;
const ll mod = 1e9 + 7;
inline ll read(){
ll x = 0, f = 1;
char ch = gc();
while(ch < '0' || ch > '9'){
if(ch == '-') f = -f;
ch = gc();
}
while(ch >= '0' && ch <= '9'){
x = (x << 3) + (x << 1) + (ch ^ 48);
ch = gc();
}
return x * f;
}
inline void print(ll x){
if(x < 0){
x = -x;
putchar('-');
}
if(x == 0){
putchar('0');
return;
}
static int a[100];
ll ans = 0;
while(x){
a[++ ans] = x % 10;
x /= 10;
}
Down(i,ans,1){
pc('0' + a[i]);
}
}
inline void println(ll x){
print(x);
putchar('\n');
}
inline void printspa(ll x){
print(x);
putchar(' ');
}
template < typename... Args >
inline void printspa(ll x, Args... ArgTypes){
printspa(x);
printspa(ArgTypes...);
}
template < typename... Args >
inline void println(ll x, Args... ArgTypes){
println(x);
println(ArgTypes...);
}
inline ll Ksm(ll x, ll y, ll mod){
ll Answer = 1;
for(; y; Answer = (y & 1) ? (Answer * x % mod) : (Answer), y >>= 1, x = x * x % mod);
return Answer;
}
inline ll Gcd(ll x, ll y){
return ((y == 0) ? (x) : (Gcd(y, x % y)));
}
inline ll Gcd(ll x){
return x;
}
template < typename... Args >
inline ll Gcd(ll x, Args... ArgTypes){
return Gcd(x, Gcd(ArgTypes...));
}
inline ll Lcm(ll x, ll y){
return x * y / Gcd(x, y);
}
inline ll Lcm(ll x){
return x;
}
template < typename... Args >
inline ll Lcm(ll x, Args... ArgTypes){
return Lcm(x, Lcm(ArgTypes...));
}
inline ll max(ll x, ll y){
return (x > y) ? (x) : (y);
}
inline ll max(ll x){
return x;
}
template < typename... Args >
inline ll max(ll x, Args... ArgTypes){
return max(x, max(ArgTypes...));
}
inline ll min(ll x, ll y){
return (x < y) ? (x) : (y);
}
inline ll min(ll x){
return x;
}
template < typename... Args >
inline ll min(ll x, Args... ArgTypes){
return min(x, min(ArgTypes...));
}
ll Diff[200];
int main(){
ll T = read();
while(T --){
ll n = read();
For(i, 1, n){
Diff[i] = read();//输入难度
}
std::sort(Diff + 1, Diff + n + 1);//排序
if(n < 10 || n > 13){
puts("No");
continue;//判断题目数量
}
if(Diff[1] != 1 || Diff[2] != 1){
puts("No");
continue;//判断最简单的题目(2,3两项)
}
bool p = true;
For(i, 1, n - 2){
if(Diff[i + 1] - Diff[i] > 2){
p = false;
break;
}
}//判断差值
if(!p){
puts("No");
continue;
}
puts("Yes");
}
}