Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Query Update Index และหา GCD ใน Range ด้วย Segment Tree ใน C++

    โจทย์: Array ของจำนวนเต็ม รองรับ 2 operations: 1) Update index i ด้วยค่าใหม่ 2) Query GCD ใน range [l, r] โครงสร้างข้อมูล: Segment Tree แต่ละ node เก็บ GCD ของ segment Build: O(N) Update: O(log N) Query: O(log N) ตัวอย่างโค้ด C++ #include <bits/stdc++.h> using namespace std; int

  2. Query จำนวนสีที่แตกต่างใน Subtree ของ Colored Tree ด้วย BIT ใน C++

    โจทย์: Rooted tree แต่ละโหนดมีสี ตอบ query: จำนวนสีที่แตกต่างใน subtree ของโหนด v เทคนิค: Euler Tour + BIT (Fenwick Tree) + Offline Queries DFS: บันทึก timeIn[v], timeOut[v] และ flatTree (ขนาด 2N) 2. สำหรับแต่ละสี เก็บ positions ใน flatTree 3. ใช้ BIT นับ distinct colors: เพิ่ม +1 ที่ first

  3. Query Absolute Difference ระหว่าง L-th และ R-th Smallest ใน C++

    โจทย์: กำหนด array และ queries แต่ละ query ให้ L, R หา |index(L-th smallest) - index(R-th smallest)| ใน array เดิม ตัวอย่าง: arr=[1,7,4,2,8], query (2,7) → 2nd smallest=2 (index 3), 7th smallest ไม่มี? (โจทย์อาจหมายถึง value 2 และ 7) วิธีทำ สร้าง array of pairs (value, original_index) 2. Sor

  4. หา 3 จำนวนเต็ม ≤ N ที่ LCM มากที่สุดใน C++

    โจทย์: กำหนด N หา 3 จำนวนเต็ม ≤ N ที่ LCM มากที่สุด ตัวอย่าง: N=34 → 34, 33, 31 (LCM = 34×33×31 เพราะ pairwise coprime) Logic ถ้า N คี่: N, N-1, N-2 (3 ตัวติดกัน คี่-คู่-คี่ → pairwise coprime) ถ้า N คู่: ถ้า gcd(N, N-3) = 1 → N, N-1, N-3 Else → N-1, N-2, N-3 ตัวอย

  5. Query Ancestor-Descendant Relationship ใน Tree ด้วย C++

    โจทย์: กำหนด rooted tree และ Q queries แต่ละ query ให้ 2 โหนด ตรวจสอบว่าโหนดหนึ่งเป็น ancestor ของอีกตัวหรือไม่ เทคนิค: DFS Timestamps (Euler Tour) DFS จาก root บันทึก timeIn[u] (เวลาเข้า) และ timeOut[u] (เวลาออก) u เป็น ancestor ของ v ↔ timeIn[u] ≤ timeIn[v] AND timeOut[v] ≤ timeOut[u] ตอบ

  6. หา Path จาก Corner ไป Middle ใน Maze (Jump by Cell Value) ใน C++

    โจทย์: Square maze N×N แต่ละ cell มีตัวเลข n จาก cell (i,j) เดินได้ n steps ใน 4 ทิศทาง: (i±n, j), (i, j±n) หา paths ทั้งหมดจาก corner ไป middle ตัวอย่าง 9x9 maze → 5 paths อัลกอริธึม: DFS + Backtracking เริ่มจาก 4 corners 2. DFS: ถ้าถึง middle (N/2, N/2) → print path ลอง 4

  7. หา Smallest Range ที่ครอบคลุม Element จาก K Lists ใน C++

    โจทย์: กำหนด K sorted lists หา range [a,b] ที่เล็กที่สุด (b-a น้อยที่สุด tie-break a น้อยที่สุด) ที่มีอย่างน้อย 1 element จากแต่ละ list ตัวอย่าง: [[4,10,15,25,26],[0,9,14,20],[5,18,24,30]] → [14,18] อัลกอริธึม: Min-Heap + Sliding Window Push element แรกของแต่ละ list เข้า min-heap (value, list_

  8. หา K ค่าที่ใกล้ Target มากที่สุดใน BST ใน C++

    โจทย์: กำหนด BST และ target (float) หา k ค่าใน BST ที่ใกล้ target มากที่สุด (k ≤ total nodes) ตัวอย่าง: BST [4,2,5,1,3], target=3.714286, k=2 → [4,3] อัลกอริธึม: Two Stacks (Inorder + Reverse Inorder) pushSmaller: ดึงค่าที่ < target เรียงมาก→น้อย (stack) pushLarger: ดึงค่าที่ ≥ target เรียงน

  9. หาทิศทางจาก String ของ L และ R ใน C++

    โจทย์: String ประกอบด้วย L (ซ้าย) และ R (ขวา) เริ่มหันหน้าทิศเหนือ (N) หาทิศทางสุดท้าย ตัวอย่าง: RRLRLLR → E เริ่ม N RR → หันขวา 2 ครั้ง = S LR → หันซ้ายขวา = กลับ N LL → หันซ้ายซ้าย = W? (wait) จริงๆ จาก N: L=W, L=S → S R → หันขวา = W? จริงๆ จาก S: R=W → W อธิบายในโจทย์: RR→S, LR→N, L

  10. หา Element ที่ Frequency ต่างจาก Element อื่นๆ ใน Array (M Times) ใน C++

    โจทย์: Array ขนาด N ทุก element ปรากฏ M ครั้ง ยกเว้น 1 ตัว หาตัวนั้น ตัวอย่าง: A=[6,2,7,2,2,6,6], M=3 → 7 (เพราะ 6 และ 2 ปรากฏ 3 ครั้ง) อัลกอริธึม: Bit Counting นับจำนวน bit 1 ในแต่ละ bit position (0-31) ของทุกตัวเลข 2. สำหรับแต่ละ bit: count[i] % M จะเป็น bit ของตัวเลขที่ต้องการ (เพราะตัวอื

  11. หา Element ที่ปรากฏครั้งเดียวใน Array ที่ Element อื่นปรากฏสองครั้งใน C++

    โจทย์: Array มีตัวเลขทุกตัวปรากฏ 2 ครั้ง ยกเว้น 1 ตัวที่ปรากฏ 1 ครั้ง หาตัวนั้น หลักการ: XOR properties x ^ x = 0 x ^ 0 = x XOR associative & commutative → XOR ทั้ง array = ตัวที่ปรากฏครั้งเดียว ตัวอย่างโค้ด (Python → แปลงเป็น C++) #include <bits/stdc++.h> using namespace std; int

  12. หา Largest Area Rectangular Sub-matrix ที่ Sum เท่ากับ K ใน C++

    โจทย์: กำหนด 2D matrix และค่า K หา sub-matrix สี่เหลี่ยมที่มีพื้นที่มากที่สุด ซึ่งผลรวม elements = K ตัวอย่าง: Matrix 4x4, K=9 → sub-matrix (1,0) ถึง (3,2) พื้นที่ 3x3=9 อัลกอริธึม: Fix Left/Right Columns + 1D Subarray Sum = K Fix left column, ขยาย right column สำหรับแต่ละ (left, right) คำนว

  13. หาตัวเลขที่หาร 3 ลงตัวมากที่สุดจาก Digits Array (Set 2) ใน C++

    โจทย์: กำหนด array of digits หาตัวเลขที่หาร 3 ลงตัวมากที่สุดโดยการต่อ digits บางส่วนในลำดับใดก็ได้ คำตอบอาจใหญ่มาก → return string ถ้าไม่มีคืน empty string ตัวอย่าง: [7,2,8] → 87 (8+7=15 หาร 3 ลงตัว) หลักการ: Divisibility by 3 ตัวเลขหาร 3 ลงตัว ↔ ผลรวม digits หาร 3 ลงตัว กลยุทธ์: จัดกลุ่ม digi

  14. หา Lexicographically Smallest Sequence จากการจัดเรียง Array B ใหม่ใน C++

    โจทย์: กำหนด array A, B ขนาด n จัดเรียง B ใหม่ ให้ sequence (A[i] + B[i]) % n มี lexicographically smallest คืน sequence นั้น ตัวอย่าง: A={1,2,3,2}, B={4,3,2,2} → output [0,0,1,2] อัลกอริธึม: Greedy + Ordered Multiset เก็บ frequency ของ B ใน map และค่า unique ใน set (ordered) วน i = 0..n-1:

  15. หา Maximum Cost ของ Array of Pairs เลือกได้สูงสุด K คู่ใน C++

    โจทย์: กำหนด array of pairs A เลือกได้สูงสุด K คู่ Cost = (ผลรวม first elements) × (min ของ second elements ในคู่ที่เลือก) หา max cost ตัวอย่าง: เลือก (4,8), (10,3), (3,6) → cost = (4+10+3) × 3 = 51 (K=3) อัลกอริธึม: Sort + Greedy + Min-Heap (Set) Sort pairs ตาม second value (ค่าที่จะเป็น min)

  16. หาจำนวนสี่เหลี่ยมผืนผ้าที่เหลือขั้นต่ำหลังจากใส่ซ้อนกันใน C++

    โจทย์: กำหนด N สี่เหลี่ยมผืนผ้า (width, height) หาจำนวนสี่เหลี่ยมที่เหลือขั้นต่ำหลังจากใส่ซ้อนกัน (nesting) ได้ กฎ: R1 ใส่ใน R2 ได้ก็ต่อเมื่อ W1 < W2 และ H1 < H2 ตัวอย่าง: {{30,45}, {15,15}, {45,30}, {60,75}} → คำตอบ 2 (ใส่ {15,15} ใน {30,45} แล้วใส่ใน {60,75} เหลือ {45,30} และ {60,75}) อัลกอริธึ

  17. หาความน่าจะเป็นการไปถึงทุกตำแหน่งหลัง N ครั้งจากจุด N บน Number Line ใน C++

    โจทย์: เริ่มที่ตำแหน่ง N บนเส้นจำนวน เดิน N ครั้ง แต่ละครั้งเดินซ้าย (probability L) หรือขวา (1-L) หาความน่าจะเป็นที่จะอยู่ที่แต่ละตำแหน่งหลังเดินครบ N ครั้ง ตัวอย่าง: N=2, L=0.5 → ตำแหน่งเป็นไปได้: 0, 1, 2, 3, 4 (offset จาก 0 ถึง 2N) ความน่าจะเป็น: [0.25, 0, 0.5, 0, 0.25] Dynamic Programming App

  18. หาระยะทางสั้นที่สุดระหว่าง Good Nodes ใดๆ สองโหนดใน Weighted Graph ด้วย C++

    โจทย์: กราฟไม่มีทิศทางมีน้ำหนัก (weighted undirected graph) มี N โหนด M เอจ บางโหนดเป็น good nodes หาระยะทางสั้นที่สุดระหว่างคู่ good nodes ใดๆ หนึ่งคู่ ตัวอย่าง: Good nodes = {1, 3, 5} ระยะทาง: 1-3 = 11, 3-5 = 13, 1-5 = 24 → คำตอบ = 11 อัลกอริธึม: Multi-source Dijkstra (รันจากทุก good node) ส

  19. หา Starting Indices ของ Substrings ที่ประกอบจากคำใน List ทั้งหมด (Concatenated Words) ใน C++

    โจทย์: กำหนด string s และ list ของคำ words (ทุกคำยาวเท่ากัน) หา starting indices ทั้งหมดของ substring ใน s ที่เป็นการต่อกันของคำใน words ทุกคำครบถ้วน ไม่มีตัวอักษรแทรกแซง ตัวอย่าง: s = wordgoodgoodgoodword, words = [word,good] → indices [0, 12] เพราะ wordgood (index 0) และ goodword (index 12) อัล

  20. คำนวณค่า ฟังก์ชัน Y = (X^6 + X^2 + 9894845) % 981 ใน C++

    โจทย์: หาค่า f(x) = (x^6 + x^2 + 9894845) % 971 สำหรับ x ที่กำหนด (หมายเหตุ: โจทย์เขียน 981 แต่โค้ดใช้ 971 ใช้ 971 ตามโค้ด) ใช้ Modular Exponentiation (Binary Exponentiation) คำนวณ x^e mod m อย่างมีประสิทธิภาพ O(log e) อัลกอริธึม power_mod(base, exp, mod) base = base % mod result = 1 วนลูป

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:211/301  20-คอมพิวเตอร์/Page Goto:1 205 206 207 208 209 210 211 212 213 214 215 216 217