我写的代码一直有三个测试点错误
原题链接:21184.赛跑2025-04-19 21:02:13
发布于:江苏
和标准题解有思路上的区别,大家可以两者对比这看,防止和我犯相同的错误
#include <iostream>
#include <vector>
using namespace std;
struct Segment {
int speed;
int time;
};
int main() {
int N, M;
cin >> N >> M;
vector<Segment> shSegments(N);
vector<Segment> kcSegments(M);
// 读取SH的数据
for (int i = 0; i < N; ++i) {
    cin >> shSegments[i].speed >> shSegments[i].time;
}
// 读取KC的数据
for (int i = 0; i < M; ++i) {
    cin >> kcSegments[i].speed >> kcSegments[i].time;
}
int shIndex = 0, kcIndex = 0;
int shTimeLeft = shSegments[shIndex].time;
int kcTimeLeft = kcSegments[kcIndex].time;
int shSpeed = shSegments[shIndex].speed;
int kcSpeed = kcSegments[kcIndex].speed;
int shDistance = 0, kcDistance = 0;
int leadChanges = 0;
int lastState = 0; // 0: 平局, 1: SH领先, 2: KC领先
while (shIndex < N || kcIndex < M) {
    // 处理当前时间单位(1秒)
    shDistance += shSpeed;
    kcDistance += kcSpeed;
    // 确定当前状态
    int currentState;
    if (shDistance > kcDistance) {
        currentState = 1;
    } else if (shDistance < kcDistance) {
        currentState = 2;
    } else {
        currentState = 0;
    }
    // 更新变化次数(忽略初始平局)
    if (lastState != 0 && currentState != lastState) {
        leadChanges++;
    }
    // 更新最后有效状态(平局不改变最后状态)
    if (currentState != 0) {
        lastState = currentState;
    } else if (lastState == 0) {
        // 保持平局状态,直到有新的领先出现
        lastState = currentState;
    }
    // 更新时间剩余并切换段
    shTimeLeft--;
    kcTimeLeft--;
    if (shTimeLeft == 0 && shIndex < N) {
        shIndex++;
        if (shIndex < N) {
            shSpeed = shSegments[shIndex].speed;
            shTimeLeft = shSegments[shIndex].time;
        } else {
            shSpeed = 0; // 后续不再移动
        }
    }
    if (kcTimeLeft == 0 && kcIndex < M) {
        kcIndex++;
        if (kcIndex < M) {
            kcSpeed = kcSegments[kcIndex].speed;
            kcTimeLeft = kcSegments[kcIndex].time;
        } else {
            kcSpeed = 0; // 后续不再移动
        }
    }
    // 双方都完成时退出
    if (shIndex >= N && kcIndex >= M) break;
}
cout << leadChanges << endl;
return 0;
}
全部评论 1


2025-04-20 来自 浙江
0下面的三个测试点错误上面的改正之后下面的三个错了
2025-04-21 来自 江苏
0












有帮助,赞一个