专栏文章

题解:P14101 [ZJCPC 2017] Problem Preparation

P14101题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minqyhe6
此快照首次捕获于
2025/12/02 06:54
3 个月前
此快照最后确认于
2025/12/02 06:54
3 个月前
查看原文

题目大意

nn 道题目组成了一场比赛,第 ii 道题目的难度为 sis_i,这场比赛要满足以下条件就是被称作合法的
  1. 题目的数量要是 101310 \sim 13(包括 10101313
  2. 最简单的题目难度为 11
  3. 难度为 11 的题目至少有 22 道。
  4. 排序后,相邻的两道题目难度差不能大于 22(不包含最难的题目)。

题解

直接按照题意模拟即可,第二项和第三项可以合并,排序之后判断第一个和第二个是不是 11 和相邻两个的差是否小于等于 22 就可以了。

代码

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 条评论,欢迎与作者交流。

正在加载评论...