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;
}