Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. K Inverse Pairs Array: อาร์เรย์ที่มี Inverse Pairs จำนวน K ใน C++

    ปัญหา กำหนด n และ k หาจำนวน Permutation ของ 1..n ที่มี Inverse Pairs ทั้งหมด กี่คู่ Inverse Pair = คู่ (i, j) ที่ i < j และ a[j] คำตอบ modulo 10^9 + 7 ตัวอย่าง: n=3, k=1 → Permutations: [1,3,2]2), [2,1,3]1) → 2 วิธี แนวคิด: Dynamic Programming State dp[i][j] = จำนวน Permutation ของ 1..i ที่มี In

  2. ช่วงเล็กที่สุดครอบคลุม K ลิสต์ (Smallest Range Covering Elements from K Lists) ใน C++

    ภาพรวมปัญหา มี k ลิสต์จำนวนเต็มที่เรียงแล้ว หาช่วง [a,b] ที่เล็กที่สุดที่มีอย่างน้อย 1 ตัวจากแต่ละลิสต์ ช่วง [a,b] เล็กกว่า [c,d] ถ้า b-a < d-c หรือ a < c ถ้าเท่ากัน ตัวอย่าง [[4,10,15,25,26], [0,9,14,20], [5,18,24,30]] → [14, 18] แนวทางแก้ปัญหา (K-way Merge + Priority Queue) ใช้ Min-Heap เก็บ (

  3. เกมซูมา (Zuma Game) ใน C++

    ภาพรวมปัญหา เกม Zuma: มีแถวลูกบอลบนโต๊ะ (สี R,Y,B,G,W) เรามีลูกบอลในมือ ทุกครั้งเลือก 1 ลูกจากมือ แทรกเข้าแถว หากมี 3 ลูกขึ้นไปติดกันสีเดียวกัน จะหายไป ทำซ้ำจนไม่มีลูกหายแล้ว หาลูกบอลน้อยที่สุดที่ต้องแทรกเพื่อกำจัดลูกบอลทั้งหมดบนโต๊ะ ไม่ได้คืน -1 ตัวอย่าง Board: WRRBBW, Hand: RBW → Output: 3 แทรก

  4. คู่ผกผันย้อนกลับ (Reverse Pairs) ใน C++

    ภาพรวมปัญหา มีอาร์เรย์ หาจำนวนคู่ (i, j) ที่ i 2 × nums[j] เรียกว่า important reverse pairs ตัวอย่าง [2,8,7,7,2] → Output: 3 แนวทางแก้ปัญหา (Merge Sort + Counting) 2×right[j] ใช้ two pointers: สำหรับแต่ละ left[i] หา right[j] แรกที่ 2×right[j] ≥ left[i] จำนวน valid pairs = (mid+1) - first_valid

  5. IPO (Initial Public Offering) ใน C++

    ภาพรวมปัญหา บริษัท A ต้องการทำ IPO มีโครงการหลายโครงการ แต่ละโครงการมีกำไรสุทธิ Pi และต้องการทุนขั้นต่ำ Ci เริ่มต้นมีทุน W สามารถทำได้สูงสุด k โครงการ หาทุนสูงสุดหลังทำโครงการได้ ตัวอย่าง k=2, W=0, Profits=[1,2,4], Capital=[0,1,1] → Output: 5 ทำโครงการ 0 (ต้องทุน 0) ได้กำไร 1 → ทุน=1, ทำโครงการ 2

  6. เครื่องซักผ้าซูเปอร์ (Super Washing Machines) ใน C++

    ภาพรวมปัญหา มีเครื่องซักผ้า n เครื่องเรียงติดกัน แต่ละเครื่องมีชุดผ้าบางจำนวน ในแต่ละขั้นตอน เลือก m เครื่อง (1≤m≤n) ส่งผ้า 1 ชุดจากแต่ละเครื่องไปเครื่องข้างเคียง (ซ้ายหรือขวา) พร้อมกัน หาขั้นตอนน้อยที่สุดทำให้ทุกเครื่องมีผ้าเท่ากัน ไม่ได้คืน -1 ตัวอย่าง [1,0,5] → 3 ขั้นตอน: 5→0 ได้ [1,1,4], แล้วก

  7. ลบกล่อง (Remove Boxes) ใน C++

    ภาพรวมปัญหา มีกล่องสีต่างๆ (แทนด้วยตัวเลข) ลบกล่องได้หลายรอบ แต่ละรอบเลือกกล่องติดกันสีเดียวกัน k กล่อง ลบได้ k² คะแนน หาคะแนนสูงสุด ตัวอย่าง [1,3,2,2,2,4,4,3,1] → 21 คะแนน แนวทางแก้ปัญหา (DP 3 มิติ + Recursion) dp[i][j][k] = คะแนนสูงสุดจาก boxes[i..j] โดยมีกล่องสีเดียวกับ boxes[i] อยู่ด้านซ้าย

  8. บันทึกเข้าเรียน 2 (Student Attendance Record II) ใน C++

    ภาพรวมปัญหา กำหนด n หาจำนวนบันทึกเข้าเรียนความยาว n ที่ได้รับรางวัล (rewardable) mod 1e9+7 ตัวอักษร: A=ขาด, L=สาย, P=มา ได้รางวัลถ้า: A ≤ 1 ตัว, ไม่มี L ติดกัน 3 ตัว ตัวอย่าง n=2 → 8 วิธี: PP, AP, PA, LP, PL, AL, LA, LL (AA ไม่ได้) n=3 → 19 วิธี แนวทางแก้ปัญหา (DP 5 สถานะ) p[i] = จำนวนสตริงความย

  9. หาพาลินโดรมที่ใกล้ที่สุด (Find the Closest Palindrome) ใน C++

    ภาพรวมปัญหา กำหนดตัวเลข n (เป็นสตริง) หาพาลินโดรมที่ใกล้ที่สุด (ความต่างสัมบูรณ์น้อยที่สุด) อาจน้อยกว่าหรือมากกว่าก็ได้ ตัวอย่าง n = 145 → Output: 141 (|145-141|=4, |151-145|=6) แนวทางแก้ปัญหา สร้าง candidate palindromes จาก: 10^n - 1 (999...), 10^(n-1) - 1 (99...), 10^(n-1) + 1 (100...00

  10. จำนวนเต็มไม่ติดลบไม่มี 1 ติดกัน (Non-negative Integers without Consecutive Ones) ใน C++

    ภาพรวมปัญหา กำหนดจำนวนเต็มบวก n หาจำนวนจำนวนเต็มไม่ติดลบ ≤ n ที่ตัวแทนไบนารีไม่มี 1 ติดกัน ตัวอย่าง: n=7 → คำตอบ 5 (0,1,2,4,5 = 0,1,10,100,101) แนวทางแก้ปัญหา (Fibonacci + Bit DP) แปลง n เป็นสตริงบิต (LSB first) ones[i], zeroes[i] = จำนวนสตริงบิตความยาว i+1 ที่ลงท้ายด้วย 1, 0 ตามลำดับ ไม่มี 11 ze

  11. อาร์เรย์คู่ผกผัน K คู่ (K Inverse Pairs Array) ใน C++

    ภาพรวมปัญหา กำหนด n และ k หาจำนวนอาร์เรย์ที่เป็นการเรียงสับเปลี่ยนของ 1..n ที่มี inverse pairs ทั้งหมด k คู่ Inverse pair: i a[j] คำตอบ mod 1e9+7 ตัวอย่าง n=3, k=1 → Output: 2 ([1,3,2] และ [2,1,3]) แนวทางแก้ปัญหา (Dynamic Programming) dp[i][j] = จำนวนการเรียงสับเปลี่ยนของ 1..i ที่มี j inverse p

  12. หาระยะห่างคู่ที่ K น้อยที่สุด (Find K-th Smallest Pair Distance) ใน C++

    ภาพรวมปัญหา มีอาร์เรย์จำนวนเต็ม หาระยะห่าง (absolute difference) ของคู่ที่ K น้อยที่สุด ระยะห่างของคู่ (A, B) คือ |A - B| ตัวอย่าง [1, 3, 8] คู่ทั้งหมด: [1,3]=2, [3,8]=5, [1,8]=7 → k=2 → คำตอบ 5 แนวทางแก้ปัญหา (Counting Sort + Prefix Sum) หาค่าสูงสุด x ในอาร์เรย์ นับความถี่ของแต่ละระยะห่างใน cnt

  13. เก็บเชอร์รี (Cherry Pickup) ใน C++

    ภาพรวมปัญหา มีกริด N x N ที่มีเชอร์รี แต่ละเซลล์เป็น: 0=ว่าง, 1=มีเชอร์รี, -1=หนามบล็อกทาง ต้องเก็บเชอร์รีสูงสุดโดย: เริ่ม (0,0) ไป (N-1,N-1) เดินขวา/ล่าง กลับ (N-1,N-1) ไป (0,0) เดินซ้าย/บน ผ่านเชอร์รีเก็บได้ (กลายเป็น 0) ไม่มีทางระหว่าง (0,0) และ (N-1,N-1) → ได้ 0 ตัวอย่าง Grid 3x3 → Output: 5

  14. แตกปลอดกล่อง (Cracking the Safe) ใน C++

    ภาพรวมปัญหา สมมติว่ามีกล่องที่ป้องกันด้วยรหัสผ่าน รหัสผ่านคือลำดับ n หลัก แต่ละหลักเป็น 0 ถึง k-1 เมื่อป้อนรหัส หลัง n หลักสุดท้ายจะถูกตรวจสอบกับรหัสที่ถูกต้อง ตัวอย่าง: รหัส 563 ป้อน 285639 กล่องจะเปิด เพราะ 563 ตรงกับ suffix หารหัสผ่านสั้นที่สุดที่รับประกันว่าจะเปิดกล่องได้ในบางจุด ตัวอย่าง n =

  15. ว่ายน้ำในน้ำที่เพิ่มขึ้น (Swim in Rising Water) ใน C++

    ภาพรวมปัญหา สมมติว่ามีตาราง N x N แต่ละเซลล์ grid[i][j] แสดงความสูงที่จุด (i,j) เริ่มฝนตก ที่เวลา t ระดับน้ำทุกที่ = t เราสามารถว่ายน้ำจากเซลล์หนึ่งไปอีกเซลล์หนึ่ง (4 ทิศทาง) ได้ก็ต่อเมื่อความสูงของทั้งสองเซลล์ ≤ t เราสามารถว่ายน้ำได้ไกลแค่ไหนก็ได้ในเวลา 0 เริ่มจาก (0, 0) หาเวลาน้อยที่สุดที่ไปถึง (

  16. การไปถึงจุดหมาย (Reaching Points) ใน C++

    ภาพรวมปัญหา สมมติว่ามีจุดเริ่มต้น (sx, sy) และจุดเป้าหมาย (tx, ty) ต้องการตรวจสอบว่ามีลำดับการเคลื่อนที่จากจุดเริ่มต้นไปจุดเป้าหมายหรือไม่ การเคลื่อนที่: จาก (x, y) สามารถไป (x, x+y) หรือ (x+y, y) ได้ ตัวอย่าง Start: (1, 1), Target: (4, 5) → true Path: (1,1) → (2,1) → (3,1) → (4,1) → (4,5) แนวทาง

  17. แปลงเป็นกระดานหมากรุก (Transform to Chessboard) ใน C++

    ภาพรวมปัญหา สมมติว่ามีกระดาน N x N ที่มีแค่ 0 และ 1 ในแต่ละการเคลื่อนที่ เราสามารถสลับแถว 2 แถว หรือคอลัมน์ 2 คอลัมน์ ได้ ต้องการหาจำนวนการเคลื่อนที่น้อยที่สุดเพื่อทำให้กระดานกลายเป็น กระดานหมากรุก (สลับ 0 และ 1 ทีละเซลล์) หากไม่มีคำตอบ คืนค่า -1 ตัวอย่าง Input: {{0,1,1,0},{0,1,1,0},{1,0,0,1},{1,0

  18. เศษส่วนเฉพาะลำดับที่ K (K-th Smallest Prime Fraction) ใน C++

    ภาพรวมปัญหา สมมติว่ามีลิสต์ที่เรียงแล้ว มี 1 และจำนวนเฉพาะบางจำนวน สำหรับทุกคู่ p < q ในลิสต์ เราพิจารณาเศษส่วน p/q หาเศษส่วนที่เล็กที่สุดลำดับที่ k คืนค่าเป็นอาร์เรย์ [p, q] ตัวอย่าง A = [1, 3, 5, 7], k = 2 → เศษส่วนทั้งหมด: 1/3, 1/5, 1/7, 3/5, 3/7, 5/7 → เศษส่วนเล็กที่สุดลำดับ 2 คือ 1/5 → Output

  19. ขนาด Preimage ของฟังก์ชันศูนย์ท้ายแฟกทอเรียล (Preimage Size of Factorial Zeroes Function) ใน C++

    ภาพรวมปัญหา สมมติว่ามีฟังก์ชัน f(x) คืนค่าจำนวนศูนย์ท้ายของ x! (แฟกทอเรียล) เช่น f(3) = 0 เพราะ 3! = 6, f(11) = 2 เพราะ 11! = 39916800 กำหนด K หาจำนวนจำนวนเต็มบวก x ที่ทำให้ f(x) = K ตัวอย่าง K = 2 → Output = 5 (คือ x = 10, 11, 12, 13, 14) แนวทางแก้ปัญหา f(x) = จำนวนตัวคูณ 5 ใน x! = Σ floor(x/5^

  20. การหมุนเล็กที่สุดที่ให้คะแนนสูงสุด (Smallest Rotation with Highest Score) ใน C++

    ภาพรวมปัญหา สมมติว่าเรามีอาร์เรย์ A เราสามารถหมุนมันโดย K ทำให้อาร์เรย์กลายเป็น A[K], A[K+1], ..., A[n-1], A[0], A[1], ..., A[K-1] กฎการให้คะแนน: สมาชิกที่มีค่าน้อยกว่าหรือเท่ากับดัชนี (index) ของมัน จะได้ 1 คะแนน ตัวอย่าง A = [2, 3, 1, 5, 1] KArrayScore 0[2,3,1,5,1]2 1[3,1,5,1,2]3 2[1,5,1,2,4]3

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:179/301  20-คอมพิวเตอร์/Page Goto:1 173 174 175 176 177 178 179 180 181 182 183 184 185