有一个比赛,晋级下一轮的规则是参加者如果得分大于0且不小于排名k的参赛者得分,将晋级下一轮,先已知
时间: 2023-05-26 20:07:44 浏览: 120
所有参赛者的分数,请你确定哪些参赛者能够晋级。
具体地,假设当前参赛者的分数已经按从高到低排好序,分别为 scores = [score[0], score[1], ..., score[n-1]],那么排名第 i 位参赛者的得分为 scores[i-1],并且一定满足 scores[0] > scores[1] > ... > scores[n-1]。
示例:
输入:scores = [25, 21, 20, 13, 9, 8, 7, 6], k = 4
输出:[25, 21, 20, 13]
解释:根据规则,排名为 1、2、3 和 4 的参赛者可以晋级下一轮。
相关问题
有一个比赛,晋级下一轮的规则是:“参赛者如果得分大于0且不小于排名第K的参赛者的得分,将晋级下一轮!” 现在已知有n名参赛者(n≥k),以及他们各自的得分,现在你需要计算将有多少人晋级下一轮。 输入: 输入的第一行包含两个整数n和k(1≤k≤n≤50),一空格分开。 第二行包含n个用空格分开的整数Ai(0≤Ai≤100),表示排名第i的参赛者的得分。其中对任意的i满足Ai≥Ai+1。 输出: 输出将有多少人晋级下一轮。
算法1
(暴力枚举) $O(n^2)$
对于每一个参赛者,遍历排在他前面的k-1位参赛者,判断是否满足晋级规则即可。
时间复杂度
遍历n个参赛者,对于每个参赛者需要遍历k-1位参赛者,因此总时间复杂度为$O(n(k-1))=O(n^2)$。
C++ 代码
算法2
(排序) $O(n\log n)$
先将得分排序,然后从第k名开始遍历判断是否满足晋级规则。
时间复杂度
排序的时间复杂度为$O(n\log n)$,遍历的时间复杂度为$O(n-k)$,因此总时间复杂度为$O(n\log n)$。
C++ 代码
flutter 怎么记录手势晋级场中每个参赛者在比赛过程中的得分情况
在 Flutter 中记录手势晋级场中每个参赛者的得分情况可以通过使用状态管理来实现。你可以在每个参赛者对应的 Widget 中定义一个状态,用于记录当前参赛者的得分情况。比如:
```dart
class ContestantWidget extends StatefulWidget {
@override
_ContestantWidgetState createState() => _ContestantWidgetState();
}
class _ContestantWidgetState extends State<ContestantWidget> {
int score = 0;
void addToScore(int points) {
setState(() {
score += points;
});
}
@override
Widget build(BuildContext context) {
return Container(
child: GestureDetector(
onTap: () {
addToScore(1);
},
child: Text("Score: $score"),
),
);
}
}
```
在上面的代码中,`_ContestantWidgetState` 中定义了一个 `score` 变量用于记录当前参赛者的得分,同时还定义了一个 `addToScore` 方法来增加得分。在 `build` 方法中,将 `score` 显示在了一个 Text Widget 中,同时通过 GestureDetector 来监听 onTap 事件,每次点击时调用 `addToScore` 方法来增加得分。
在比赛过程中,你可以根据每个参赛者的得分情况,来决定谁是当前的胜出者。