专栏文章
题解:P13598 [NWRRC 2022] Absolutely Flat
P13598题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miohxdp3
- 此快照首次捕获于
- 2025/12/02 19:29 3 个月前
- 此快照最后确认于
- 2025/12/02 19:29 3 个月前
1.题目思路
本题前置知识:分支结构、数组。
我们来分析一下可行和不可行的情况。
先来看可行的情况:
- 数列 最小值与最大值相等(即数列 的值都相等),可行;
- 数列 是最小值的只有一个数,且这个数与 相加等于数列最大值,可行。
再来看不可行的情况:
- 如果数列 中不同的数的个数大于 ,那么无论如何也不能使所有数都相等,不可行。
- 除上述可行与不可行情况的其他情况都不可行。
分析完成。我们用一个计数数组记录每个数出现的次数,再用一个计数变量记录不同数的个数,以及数列最大值、最小值变量便可以完成上述判断。
2.代码
注:本代码仅供参考。
代码
CPP#include<iostream>
#include<cstdio>
using namespace std;
const int max_v=105; //a[i] 的最大值
int a[5],b,cnt,mina=2147483647,maxa;
int times[max_v]; //记录每个数出现的次数
int main(){
for(int i=1;i<=4;i++){
scanf("%d",&a[i]);
if(!times[a[i]]){ //如果之前都没出现过,那么这是第一次出现,不同数的个数 +1
cnt++;
}
times[a[i]]++;
if(cnt>2){ //不同数个数多于 2,那么一定不可行
puts("0");
return 0;
}
mina=min(mina,a[i]); //最小值
maxa=max(maxa,a[i]); //最大值
}
scanf("%d",&b);
if(mina==maxa){ //数列所有数都相等
puts("1");
}
else if(mina+b==maxa&×[mina]==1){ //只有一个数与其他数不同,且满足条件
puts("1");
}
else{ //其他情况都不可行
puts("0");
}
return 0;
}
3.后记
更多内容,请移步至:
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...