ในการแข่งขัน อัลกอริทึมที่ถูกต้องต้องมาคู่กับการ구현 (Implementation) ที่แม่นยำ
int arr[9]; // จองพื้นที่สำหรับ 100 ตัวเต็ม
arr = 5; // เข้าถึงข้อมูลด้วย Index (เริ่มที่ 0)
ประกาศไว้นอกฟังก์ชัน `main` สามารถมีขนาดใหญ่ได้มาก (ถึงระดับ \(10^7\)) และค่าเริ่มต้นจะเป็น 0 เสมอ
ประกาศในฟังก์ชัน มีขนาดจำกัด (Stack size) และค่าเริ่มต้นจะเป็นค่าขยะ (Random values) ถ้าไม่กำหนดค่า
ใช้สำหรับโจทย์ที่เป็นตารางหรือกราฟ (Adjacency Matrix)
int grid[9];
for(int i=0; i<100; i++) {
for(int j=0; j<100; j++) { cin >> grid[i][j]; }
}
เปลี่ยนขนาดได้ตามต้องการ (Dynamic resizing)
vector<int> v;
v.push_back(10); // เพิ่มข้อมูลต่อท้าย
cout << v.size(); // ดูจำนวนข้อมูลปัจจุบัน
หมายเหตุ: รายละเอียดเชิงลึกของ vector จะอยู่ในหัวข้อ STL วันที่ 3
if (x % 2 == 0) {
cout << "Even";
} else {
cout << "Odd";
}
for (int i = 0; i < n; i++) {
// ทำซ้ำ n ครั้ง
}
#define rep(i, a, b) for(int i = a; i < b; i++)
ใช้เมื่อไม่ทราบจำนวนรอบที่แน่นอน
while (n > 0) {
n /= 10; // เช่น การนับหลักของตัวเลข
}
do-while จะทำงานก่อน 1 รอบเสมอค่อยเช็คเงื่อนไข
หยุดการทำงานของลูปทันทีเมื่อพบเงื่อนไขที่กำหนด
ข้ามการทำงานในรอบปัจจุบันและไปเริ่มรอบถัดไปทันที
C++ มีฟังก์ชันช่วยหา "ลำดับถัดไป" ของข้อมูล (Lexicographical order)
sort(v.begin(), v.end());
do {
// ประมวลผลแต่ละวิธีเรียงสับเปลี่ยน
} while (next_permutation(v.begin(), v.end()));
ในโจทย์ที่มีข้อมูลขาเข้า \(10^5 - 10^6\) ตัว `cin` และ `cout` มาตรฐานอาจทำงานช้าเกินไป
ios::sync_with_stdio(0);
cin.tie(0); // ใส่ไว้ที่บรรทัดแรกของ main()
sync_with_stdio(0): ปิดการทำงานร่วมกับ C library (ห้ามใช้ scanf/printf ร่วมด้วย!) cin.tie(0): ปลดการรอระหว่าง input และ output (มีประโยชน์มาก) ขึ้นบรรทัดใหม่ + Flush Buffer (สั่งล้างบัฟเฟอร์ลงจอทันที) ซึ่งช้ามากในลูปใหญ่ๆ
ขึ้นบรรทัดใหม่เพียงอย่างเดียว (ข้อมูลจะถูกเก็บไว้ส่งทีเดียว) รวดเร็วกว่ามาก
ฟังก์ชันดั้งเดิมจากภาษา C ที่มีความเร็วสูงโดยธรรมชาติ
บางสนามแข่ง (เช่น USACO หรือโจทย์เก่า) กำหนดให้อ่าน/เขียนผ่านไฟล์
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
สามารถใช้ cin/cout ได้ตามปกติหลังจากใส่ 2 บรรทัดนี้