专栏文章
题解:P14101 [ZJCPC 2017] Problem Preparation
P14101题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minqyhe6
- 此快照首次捕获于
- 2025/12/02 06:54 3 个月前
- 此快照最后确认于
- 2025/12/02 06:54 3 个月前
题目大意
有 道题目组成了一场比赛,第 道题目的难度为 ,这场比赛要满足以下条件就是被称作合法的
-
题目的数量要是 (包括 和 )
-
最简单的题目难度为 。
-
难度为 的题目至少有 道。
-
排序后,相邻的两道题目难度差不能大于 (不包含最难的题目)。
题解
直接按照题意模拟即可,第二项和第三项可以合并,排序之后判断第一个和第二个是不是 和相邻两个的差是否小于等于 就可以了。
代码
CPP//请读者自行跳转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");
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...