题解 | 田忌赛马

田忌赛马

https://www.nowcoder.com/practice/49d799f65a0749588e9cd7e6135a4a9a

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int v[3], a[3];
    for (int i = 0; i < 3; i++) cin >> v[i];
    for (int i = 0; i < 3; i++) cin >> a[i];
    sort(v, v + 3); // 齐王的马
    sort(a, a + 3); // 田忌的马
    int win = 0, i = 0, j = 0, x = 2, y = 2;
    while (i <= x && j <= y) {
        if (a[x] > v[y]) { // 田忌最快的马能赢
            win++;
            x--; y--;
        } else if (a[i] > v[j]) { // 田忌最慢的马能赢齐王最慢的
            win++;
            i++; j++;
        } else { // 否则田忌最慢的马送掉
            i++; y--;
        }
    }
    if (win > 1) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

  1. 排序:将田忌和齐王的马速度分别升序排序。
  2. 双指针匹配:如果田忌当前最快的马能赢齐王当前最快的马,则都用最快的出战,田忌胜场+1。否则,田忌用最慢的马去“送”给齐王最快的马(牺牲),齐王最快的马淘汰掉。
  3. 统计胜场:如果田忌胜场大于 1,则输出 Yes,否则输出 No。
全部评论
代码逻辑清晰
点赞 回复 分享
发布于 06-24 12:00 四川

相关推荐

点赞 评论 收藏
分享
勇敢的90后想交流:我愿意付费上班,楼主你就安心字节待着吧,我是真的喜欢上班
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务