Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. ป้ายโฆษณาสูงสุดใน C++ (Tallest Billboard)

    คำอธิบายปัญหา มีแท่งเหล็กหลายแท่ง สามารถเชื่อมต่อกันได้ ต้องการสร้างค้ำยัน 2 ด้านที่สูงเท่ากันที่สุด หาความสูงสูงสุด หากไม่ได้คืน 0 ตัวอย่าง rods = [1,2,2,3,3,3,4] → Output: 9 Subset 1: [1,2,2,4] = 9, Subset 2: [3,3,3] = 9 แนวทางแก้ปัญหา: Dynamic Programming (Knapsack แบบความต่าง) State: dp[i][dif

  2. ลบคอลัมน์เพื่อให้เรียงลำดับ III ใน C++

    คำอธิบายปัญหา ให้อาร์เรย์ A ของ N สตริง ความยาวเท่ากัน เลือกชุดดัชนีคอลัมน์ D เพื่อลบ ทำให้แต่ละแถวของอาร์เรย์ที่เหลือเรียงลำดับ lexicographically (A[i][0] ≤ A[i][1] ≤ ...) หาขนาด D น้อยที่สุด ตัวอย่าง A = [cbcdb,ccbxc] → Output: 3 แนวทางแก้ปัญหา: Longest Increasing Subsequence (LIS) บนคอลัมน์ คอล

  3. ตัวดำเนินการน้อยที่สุดเพื่อแสดงจำนวนใน C++

    คำอธิบายปัญหา ให้จำนวนเต็มบวก x เขียนนิพจน์รูป x op1 x op2 x op3 ... โดย op ∈ {+,-,*,/} กฎ: / คืนค่าจำนวนตรรกยะ (ไม่ใช่ integer division) ไม่มีวงเล็บ ลำดับการดำเนินการปกติ: */ ก่อน +- ห้ามใช้ unary negation หาจำนวนตัวดำเนินการน้อยที่สุดเพื่อให้นิพจน์มีค่าเท่ากับ target ตัวอย่าง x = 4, target = 15

  4. ตรวจสอบจำนวนมีมีค่าเท่ากันใน C++

    คำอธิบายปัญหา ให้สตริง S และ T แทนจำนวนตรรกยะ (rational number) อาจมีวงเล็บเพื่อบ่งบอกส่วนที่ซ้ำ ตรวจสอบว่าแทนจำนวนเดียวกันหรือไม่ รูปแบบที่เป็นไปได้: Integer only: 123 Integer.NonRepeating: 0.5, 2.12 Integer.NonRepeating(Repeating): 0.1(6), 0.9(9) ตัวอย่าง S = 0.(52), T = 0.5(25) → Output: true

  5. ซับอาร์เรย์ที่มีจำนวนจำนวนเต็มต่างกัน K ตัวใน C++

    คำอธิบายปัญหา ให้อาร์เรย์ A ของจำนวนเต็มบวก ซับอาร์เรย์ ดี คือซับอาร์เรย์ติดต่อกันที่มีจำนวนจำนวนเต็มที่ต่างกันพอดี K ตัว หาจำนวนซับอาร์เรย์ที่ดี ตัวอย่าง A = [1,2,3,1,4], K = 3 → Output: 4 ซับอาร์เรย์: [1,2,3], [1,2,3,1], [2,3,1], [3,1,4] แนวทางแก้ปัญหา: Sliding Window + AtMost(K) - AtMost(K-1) จ

  6. จำนวนการพลิกบิต K ติดกันน้อยที่สุดใน C++

    คำอธิบายปัญหา ให้อาร์เรย์ A ประกอบด้วย 0 และ 1 การ K-bit flip คือเลือกซับอาร์เรย์ติดต่อกันยาว K แล้วพลิกบิตทั้งหมด (0↔1) หาจำนวนการพลิกน้อยที่สุดเพื่อให้ไม่มี 0 เหลือ หากไม่ได้คืน -1 ตัวอย่าง A = [0,0,0,1,0,1,1,0], K = 3 → Output: 3 1) flip [0..2] → [1,1,1,1,0,1,1,0] 2) flip [4..6] → [1,1,1,1,1,0,0

  7. จำนวนอาร์เรย์ Squareful ใน C++

    คำอธิบายปัญหา อาร์เรย์ A เรียกว่า Squareful ถ้าคู่ที่ติดกันทุกคู่ มีผลรวมเป็นกำลังสองสมบูรณ์ หาจำนวนการเรียงสับเปลี่ยน (permutation) ของ A ที่เป็น Squareful ตัวอย่าง A = [3,30,6] → Output: 2 Permutations: [3,6,30] และ [30,6,3] แนวทางแก้ปัญหา: Backtracking + Pruning ฟังก์ชัน isSqr(n): ตรวจสอบว่า n

  8. ต้นทุนต่ำสุดในการรวมก้อนหินใน C++

    คำอธิบายปัญหา มีก้อนหิน N ก้อนเรียงติดกัน ก้อนที่ i มี stones[i] หิน การรวม K ก้อนติดกันเป็น 1 ก้อน มีค่าใช้จ่ายเท่ากับผลรวมหินใน K ก้อนนั้น หาต้นทุนต่ำสุดในการรวมทั้งหมดเป็น 1 ก้อน หากไม่ได้คืน -1 ตัวอย่าง stones = [3,2,4,1], K = 2 → Output: 20 ขั้นตอน: [3,2,4,1] → merge [3,2] cost 5 → [5,4,1] → m

  9. จำนวนเลขที่มีตัวเลขซ้ำใน C++

    คำอธิบายปัญหา ให้จำนวนเต็มบวก N หาจำนวนจำนวนเต็มบวก ≤ N ที่มีตัวเลขซ้ำอย่างน้อย 1 ตัว ตัวอย่าง N = 99 → Output: 9 (คือ 11,22,33,44,55,66,77,88,99) แนวทางแก้ปัญหา: Complementary Counting นับจำนวนที่ ไม่มีตัวเลขซ้ำ แล้วลบออกจาก N ขั้นตอน แปลง N+1 เป็นอาร์เรย์หลัก (digit array) arr นับจำนวนที่ไม่ซ้

  10. สตรีมตัวอักษรใน C++ (StreamChecker)

    คำอธิบายปัญหา ออกแบบคลาส StreamChecker ที่รองรับ 2 การดำเนินการ: StreamChecker(words) - คอนสตรัคเตอร์ เริ่มต้นด้วยลิสต์คำ query(letter) - คืน true หากตัวอักษร k ตัวล่าสุด (จากเก่าสู่ใหม่ รวมตัวที่เพิ่ง query) สร้างคำใดคำหนึ่งในลิสต์ได้ ตัวอย่าง words = [ce, g, lm] query: a,b,c,e,f,g,h,i,j,k,l,m ผ

  11. สตริงซ้ำที่ยาวที่สุดใน C++

    คำอธิบายปัญหา ให้สตริง S พิจารณาสตริงย่อยติดต่อกันที่ซ้ำกัน 2 ครั้งขึ้นไป (อาจทับซ้อนได้) หาสตริงซ้ำที่มีความยาวมากที่สุด หากไม่มีให้คืนสตริงว่าง ผลลัพธ์อาจใหญ่มาก ให้คืนค่า modulo 10⁹+7 ตัวอย่าง Input: ababbaba → Output: bab แนวทางแก้ปัญหา ใช้ Binary Search ความยาวคำตอบ ร่วมกับ Rolling Hash (Rabi

  12. จำนวนซับแมทริกซ์ที่มีผลรวมเท่ากับเป้าหมายใน C++

    คำอธิบายปัญหา ให้เมทริกซ์และค่าเป้าหมาย (target) เราต้องการหาจำนวนซับแมทริกซ์ที่ไม่ว่างซึ่งผลรวมขององค์ประกอบเท่ากับค่าเป้าหมาย ซับแมทริกซ์ [(x1, y1), (x2, y2)] หมายถึงเซลล์ทั้งหมด matrix[x][y] ที่ x อยู่ระหว่าง x1 ถึง x2 และ y อยู่ระหว่าง y1 ถึง y2 สองซับแมทริกซ์ถือว่าต่างกันหากมีพิกัดต่างกันแม้แต่

  13. สตริงซูเปอร์ซีเควลน์สั้นที่สุดใน C++

    ให้สตริง str1 และ str2 หาสตริงที่สั้นที่สุดที่มีทั้ง str1 และ str2 เป็น subsequence (ลำดับย่อย) อาจมีหลายคำตอบ คืนค่าใดค่าหนึ่ง Subsequence หมายถึงลบตัวอักษรบางส่วนจากสตริง (อาจ 0 ตัว) ได้สตริงเป้าหมาย เช่น acab, bac เอาต์พุต = bacab ทั้งสองเป็น subsequence ของ bacab วิธีแก้ − หา LCS (Longest Commo

  14. สตริงย่อยสุดท้ายในลำดับเล็กซิโครกราฟิกใน C++

    ให้สตริง s หาสตริงย่อย (substring) ตัวสุดท้ายในลำดับเล็กซิโครกราฟิก (lexicographical order) เช่น abbbcabbc เอาต์พุต = cabbc วิธีแก้ − ใช้ Two Pointers (i, j, k) เปรียบเทียบสตริงย่อยเริ่มที่ i และ j ขยับ k เมื่อตัวอักษรเท่ากัน ตัวอย่าง #include <bits/stdc++.h> using namespace std; class Sol

  15. ทำให้อาร์เรย์เพิ่มขึ้นอย่างเข้มงวดใน C++

    ให้อาร์เรย์ arr1 และ arr2 ต้องหาจำนวนการดำเนินการน้อยที่สุดเพื่อทำให้ arr1 เพิ่มขึ้นอย่างเข้มงวด (strictly increasing) สามารถเลือกดัชนี i ใน arr1 และ j ใน arr2 กำหนด arr1[i] = arr2[j] หากทำไม่ได้คืน -1 เช่น arr1=[1,5,3,7,8], arr2=[1,3,2,5] เอาต์พุต=1 แทนที่ 5 ด้วย 2 ได้ [1,2,3,7,8] วิธีแก้ − ใช้ DP

  16. การเชื่อมต่อสำคัญในเครือข่ายใน C++

    มี n เซิร์ฟเวอร์ หมายเลข 0 ถึง n-1 เชื่อมต่อแบบไม่มีทิศทาง connections[i] = [a,b] ทุกเซิร์ฟเวอร์เชื่อมต่อโดยตรงหรือผ่านอื่นๆ การเชื่อมต่อสำคัญ (Critical Connection) คือการเชื่อมต่อที่ถ้าลบออกจะทำให้บางเซิร์ฟเวอร์เข้าถึงอีกตัวไม่ได้ ต้องหาการเชื่อมต่อสำคัญทั้งหมด เช่น n=4, connections=[[0,1],[1,2],[

  17. นับการเรียงสับเปลี่ยนสระใน C++

    ให้ตัวเลข n นับจำนวนสตริงความยาว n ที่สร้างจากสระ a,e,i,o,u ตามกติกา: a ต้องตามด้วย e, e ตามด้วย a หรือ i, i ไม่ตามด้วย i, o ตามด้วย i หรือ u, u ตามด้วย a คำตอบอาจใหญ่ ใช้โมดูลอ 10^9+7 เช่น n=2 เอาต์พุต=10 สตริงที่เป็นไปได้: ae, ea, ei, ia, ie, io, iu, oi, ou, ua วิธีแก้ − ใช้ Matrix Exponentiation

  18. ความถี่เท่าสูงสุดใน C++

    ให้อาร์เรย์ nums ของจำนวนเต็มบวก หาความยาว prefix ยาวที่สุด ที่ถ้าลบสมาชิก 1 ตัวออก จะทำให้ทุกตัวเลขที่ปรากฏมีความถี่เท่ากัน (ถ้าไม่เหลือสมาชิก ถือว่าความถี่เท่ากันที่ 0) เช่น [3,3,2,2,6,4,4,6] เอาต์พุต = 7 ลบ 6 ตัวที่ 4 ได้ [3,3,2,2,4,4] ทุกตัวปรากฏ 2 ครั้ง วิธีแก้ − นับความถี่แต่ละตัว (cnt) และนั

  19. กำไรสูงสุดในการจัดตารางงานใน C++

    สมมติว่ามี n งาน แต่ละงานมีเวลาเริ่มต้น startTime[i] เวลาสิ้นสุด endTime[i] และกำไร profit[i] ต้องหากำไรสูงสุดโดยไม่ให้งานทับซ้อนกันในเวลา (ถ้างานจบเวลา X สามารถเริ่มงานใหม่เวลา X ได้) เช่น startTime=[1,2,3,3], endTime=[3,4,5,6], profit=[500,100,400,700] เอาต์พุต=1200 วิธีแก้ − เรียงงานตามเวลาสิ้นส

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