专栏文章

题解:P14101 [ZJCPC 2017] Problem Preparation

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@minqyvfg
此快照首次捕获于
2025/12/02 06:55
3 个月前
此快照最后确认于
2025/12/02 06:55
3 个月前
查看原文
nn 道题,每道题有一个难度分数 sis_i,判断是否满足以下 44 条规则:
数量要求:10n1310 \le n \le 13。 最小难度为 11:所有题目中难度最小的值必须等于 11
至少两个难度为 11 的题:至少有 22 道题难度为 11
相邻难度差限制:将难度从小到大排序后,相邻两题的难度差 2\le 2
特殊的:如果相邻两题中有一题是最难题(最大值),则它们之间的难度差没有限制。题目保证只有一个最难题。
解题步骤:
  1. 如果 n<10n<10n>13n>13,输出 No
  2. 找出最小值 minx,如果 minx != 1,输出 No
  3. 统计难度为 11 的题目数量,如果少于 22,输出 No
  4. 排序难度数组,从第 11 个到第 n1n-1 个。如果 s[i+1] 不是最大值,s[i] 不是最大值,且 s[i+1]-s[i] <= 2,否则输出 No
  5. 全部通过,输出Yes
code:
CPP
#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;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...