牛客网 NC274692 题解:素世喝茶
题目分析
解题思路
核心思路如下:
- 遍历所有红茶,记录除了第x种红茶外的最大美味值
- 统计达到这个最大美味值的红茶数量
- 注意处理第x种红茶的输入,但不参与比较
代码实现
#include<bits/stdc++.h>
using namespace std;
int main(){int n,x,xx=0,max=0,temp=0;cin>>n>>x;for(int i=1;i<=n;i++){if(i==x)cin>>xx;//当遇到第x种红茶时,直接读取其美味值但不参与比较else{int a;cin>>a;if(a>max){max=a;//如果当前红茶美味值大于max,更新max并重置计数器temp=1;}else if(a==max)temp++;//如果等于max,计数器加1}}cout<<temp<<endl;
}
代码详解
让我们逐行分析代码的实现:
-
变量定义:
n
: 红茶的总数x
: 昨天喝的红茶编号xx
: 存储第x种红茶的美味值(虽然最终未使用)max
: 记录除第x种外最大的美味值temp
: 记录达到最大美味值的红茶数量
-
核心逻辑:
- 使用for循环遍历所有红茶
- 当遇到第x种红茶时,直接读取其美味值但不参与比较
- 对于其他红茶:
- 如果当前红茶美味值大于max,更新max并重置计数器
- 如果等于max,计数器加1
-
输出结果:
- 直接输出temp,即满足条件的红茶数量
时间复杂度分析
- 时间复杂度:O(n),只需要遍历一次数组
- 空间复杂度:O(1),只使用了几个变量
示例分析
以题目给出的示例为例:
输入:
6 4
1 1 4 5 1 4
分析过程:
- 第4种红茶(x=4)的美味值为5,不参与比较
- 其他红茶的美味值分别为:1,1,4,1,4
- 最大美味值为4
- 达到最大美味值的红茶有第3种和第6种
- 因此输出2
总结
这道题目虽然简单,但考察了以下几个重要的编程概念:
- 数组遍历
- 条件判断
- 计数器的使用
- 最大值的更新
代码实现简洁高效,没有使用额外的数据结构,完全符合题目的要求。