1 条题解

  • 0
    @ 2025-5-18 7:38:38

    #include #include #include #include #include

    using namespace std;

    struct Chirp { int minutes; int seconds; int speed; int inclination; };

    void processProgram(int programNum, const vector& samples) { vector chirps; int i = 0; int totalSamples = samples.size(); while (i <= totalSamples - 4) { int s1 = samples[i]; int s2 = samples[i+1]; int s3 = samples[i+2]; int s4 = samples[i+3]; // Check for start bits '01': first '0' then '1' if ((s1 == 4 || s1 == 5) && (s2 == 4 || s2 == 5)) { if ((s3 == 0 || s3 == 1) && (s4 == 8 || s4 == 9)) { int startIndex = i; i += 4; // Move past the start bits vector bits; // Read next 6 bits (3 speed, 3 inclination) for (int j = 0; j < 6 && i + 1 < totalSamples; ++j) { int b1 = samples[i]; int b2 = samples[i+1]; if ((b1 == 4 || b1 == 5) && (b2 == 4 || b2 == 5)) { bits.push_back(false); // '0' i += 2; } else if ((b1 == 0 || b1 == 1) && (b2 == 8 || b2 == 9)) { bits.push_back(true); // '1' i += 2; } else { break; // Invalid, but problem states chirps are well-formed } } if (bits.size() == 6) { // Calculate speed (first 3 bits, LSB first) int speed = (bits[0] ? 1 : 0) + (bits[1] ? 2 : 0) + (bits[2] ? 4 : 0); // Calculate inclination (next 3 bits, LSB first) int inclination = (bits[3] ? 1 : 0) + (bits[4] ? 2 : 0) + (bits[5] ? 4 : 0); // Calculate time int timeSeconds = startIndex / 3; int minutes = timeSeconds / 60; int seconds = timeSeconds % 60; Chirp chirp; chirp.minutes = minutes; chirp.seconds = seconds; chirp.speed = speed; chirp.inclination = inclination; chirps.push_back(chirp); } else { i = startIndex + 1; // Move to next sample if incomplete chirp } } else { i++; } } else { i++; } } // Output results cout << "Program " << programNum << endl; for (vector::const_iterator it = chirps.begin(); it != chirps.end(); ++it) { cout << setfill('0') << setw(2) << it->minutes << ":" << setw(2) << it->seconds << " Speed " << it->speed << " Inclination " << it->inclination << endl; } }

    int main() { int n; cin >> n; cin.ignore(); // Ignore the newline after n for (int programNum = 1; programNum <= n; ++programNum) { vector samples; string line; while (getline(cin, line)) { istringstream iss(line); int num; bool endOfProgram = false; while (iss >> num) { if (num == 10) { endOfProgram = true; break; } samples.push_back(num); } if (endOfProgram) break; } processProgram(programNum, samples); } return 0; }

    • 1

    信息

    ID
    551
    时间
    1000ms
    内存
    10MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者