Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: syndrxme

Problemset: Consecutive Subsequence

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-14 15:18:00

#include <iostream>
#include <vector>
#include <algorithm> // สำหรับใช้คำสั่ง sort

using namespace std;

int main() {
    vector<int> nums;
    int input;

    // 1. รับ Input ไปเรื่อยๆ จนกว่าจะเจอตัวอักษร 
    // (ตามที่โจทย์บอกว่าเจออักขระใดๆ จะหยุด) [cite: 325, 328]
    while (cin >> input) {
        nums.push_back(input);
    }

    // ถ้าไม่มีข้อมูลเลย ให้จบการทำงาน
    if (nums.empty()) return 0;

    // 2. เรียงลำดับตัวเลขจากน้อยไปมาก
    sort(nums.begin(), nums.end());

    int max_len = 0;
    int best_start = nums[0]; // เก็บเลขเริ่มต้นของชุดที่ยาวที่สุด

    int current_len = 1;
    int current_start = nums[0]; // เก็บเลขเริ่มต้นของชุดปัจจุบัน

    // 3. วนลูปเช็กด้วย index ปกติ (เริ่มที่ช่อง 1 เพราะต้องเทียบกับช่อง 0)
    for (int i = 1; i < nums.size(); i++) {
        
        // **หัวใจสำคัญ:** ถ้าเจอเลขซ้ำกัน ให้ข้ามไปเลย ไม่ต้องรีเซ็ตและไม่ต้องบวกเพิ่ม
        if (nums[i] == nums[i - 1]) {
            continue;
        }

        // ถ้าเลขติดกัน (+1) ให้นับความยาวเพิ่ม
        if (nums[i] == nums[i - 1] + 1) {
            current_len++;
        } 
        // ถ้าเลขขาดตอน
        else {
            // เช็กว่าชุดที่เพิ่งจบไป ชนะแชมป์เก่าไหม?
            if (current_len > max_len) {
                max_len = current_len;
                best_start = current_start;
            }
            // เริ่มนับชุดใหม่
            current_start = nums[i];
            current_len = 1;
        }
    }

    // 4. ดักกรณีที่ชุดที่ยาวที่สุดดันไปอยู่ตอนจบหลูปพอดี
    if (current_len > max_len) {
        max_len = current_len;
        best_start = current_start;
    }

    // 5. แสดงผลลัพธ์เป็นตัวเลขเรียงกัน [cite: 325]
    for (int i = 0; i < max_len; i++) {
        cout << best_start + i << " ";
    }
    cout << "\n";

    return 0;
}