Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python
Python
  1. โปรแกรมหาต้นทุนต่ำสุดซื้อของครบทุกชนิดใน Python

    คำอธิบายโจทย์ มี N ชนิดของ 0..N-1 สามารถซื้อ set[i] = [start, end, price] ได้ของ start..end รวม หรือทิ้งของ i ราคา removals[i] หาต้นทุนต่ำสุดได้ของทุกชนิด 1 ชิ้นพอดี ตัวอย่าง sets = [[0,4,4],[0,5,12],[2,6,9],[4,8,10]], removals = [2,5,4,6,8] → 4 วิธีแก้ปัญหา Shortest Path (Dijkstra) บนกราฟ: Node

  2. โปรแกรมหาคะแนนคาดหวังในการแข่งขันเขียนโปรแกรมใน Python

    คำอธิบายโจทย์ การแข่งขันจบเมื่อแก้โจทย์ได้ 1 ข้อ มีโจทย์หลายข้อ points[i], chances[i]% โอกาสแก้ได้ ลองได้สูงสุด k ข้อ (ไม่ซ้ำ) หาคะแนนคาดหวังสูงสุด ปัดจำนวนเต็ม ตัวอย่าง points=[600,400,1000], chances=[10,90,5], k=2 → 392 วิธีแก้ปัญหา DP + Greedy เรียงตาม points มากไปน้อย: แปลง chances เป็น확률 (หา

  3. โปรแกรมหาจำนวนการแก้ไขน้อยที่สุดเพื่อทำให้สมการถูกต้องใน Python

    คำอธิบายโจทย์ ให้สตริงสมการ x+y=z หาจำนวนตัวเลขน้อยที่สุดที่ต้องแทรก (insert) เข้าไปใน s เพื่อให้สมการเป็นจริง ตัวอย่าง s = 2+6=7 → 2 (แทรก 1, 2 ได้ 21+6=27) วิธีแก้ปัญหา DP บนตัวเลข (Digit DP) จากหลักหน่วยขึ้นไป: แยก A, B, C จากสตริง dp(i, j, k, carry) = insert น้อยที่สุดสำหรับ suffix A[i:], B[j

  4. โปรแกรมหา Cost ต่ำสุดจากกราฟถ่วงน้ำหนักใน Python

    คำอธิบายโจทย์ กราฟ undirected edges = [u, v, w] cost ของ path = (จำนวน edges) × (max weight บน path) หา cost ต่ำสุดจาก 0 ถึง n-1 ตัวอย่าง edges = [[0,2,100],[1,2,200],[1,3,100],[2,3,300]] → 600 วิธีแก้ปัญหา BFS + Binary Search บน max weight: สร้าง adjacency list และ weight map Binary search บน ma

  5. โปรแกรมหา Power สูงสุดของลิสต์หลังย้ายสมาชิกหนึ่งตัวใน Python

    คำอธิบายโจทย์ Power ของลิสต์ = Σ(i+1) * A[i] สามารถย้ายสมาชิกหนึ่งตัวไปตำแหน่งไหนก็ได้ (หรือไม่ย้าย) หา Power สูงสุด mod 10^9+7 ตัวอย่าง nums = [4, 2, 1] → เอาต์พุต: 16 วิธีแก้ปัญหา Convex Hull Trick (CHT) / Line Container: คำนวณ base power และ prefix sum P ย้าย A[i] ไป j: Δ = -j*A[i] + P[j] - (-

  6. โปรแกรมนับศูนย์นำหน้าของ LCM(1..k) ใน Python

    คำอธิบายโจทย์ ให้ k หา x = LCM(1, 2, ..., k) (ค่าที่หารด้วย 1..k ลงตัว) แล้วนับ trailing zeros ของ x ตัวอย่าง k = 6 → x = 60 → trailing zeros = 1 (โจทย์ตัวอย่างเขียน 0 แต่ควรเป็น 1) วิธีแก้ปัญหา Trailing zeros = จำนวน factor 10 = min(จำนวน 2, จำนวน 5) ใน LCM แต่ LCM มี factor 2 มากกว่า 5 เสมอ → ต้

  7. โปรแกรมหาจำนวนการรวมตัวเลขติดกันเพื่อให้ลิสต์ไม่เพิ่ม (non-increasing) ใน Python

    คำอธิบายโจทย์ ให้รายการ nums Operation: รวม 2 ตัวติดกันเป็นผลรวม หา operations น้อยที่สุดทำให้ list กลายเป็น non-increasing (แต่ละตัว ≥ ตัวถัดไป) ตัวอย่าง nums = [2, 6, 4, 10, 2] → 2 (รวม [2,6]→8 ได้ [8,4,10,2] แล้วรวม [8,4]→12 ได้ [12,10,2]) วิธีแก้ปัญหา DP แบบ Greedy จากท้ายมาหน้า: เพิ่ม -inf ท

  8. โปรแกรมนับตัวอักษรที่ distinct ในทุก substring ใน Python

    คำอธิบายโจทย์ ให้สตริง s ตัวพิมพ์เล็ก หาผลรวมของจำนวนตัวอักษรที่ distinct (ปรากฏครั้งเดียว) ในทุก substring ของ s ผลลัพธ์ mod 10^9+7 ตัวอย่าง s = xxy → เอาต์พุต: 6 Substrings: x(1), x(1), y(1), xx(0), xy(2), xxy(1) = 6 วิธีแก้ปัญหา Contribution Technique (นับส่วนร่วมของแต่ละตัวอักษร): ตัวอักษรแต่

  9. โปรแกรมนับกำแพงขั้นต่ำแบ่งมุมซ้ายบน-ขวาล่างใน Python

    คำอธิบายโจทย์ เมทริกซ์ไบนารี 0=ว่าง 1=กำแพง หาจำนวนเซลล์น้อยที่สุดที่ต้องเปลี่ยนเป็นกำแพง เพื่อไม่ให้มีทางจาก (0,0) ไป (R-1,C-1) เดิน 4 ทิศทาง ไม่ให้วางกำแพงบนมุมเริ่ม/ปลาย ตัวอย่าง เมทริกซ์ 4x4 → เอาต์พุต: 2 (ต้องเพิ่มกำแพง 2 เซลล์) วิธีแก้ปัญหา Articulation Points (Cut Vertices) + DFS + BFS: หา

  10. โปรแกรมเช็คว่าบุคคลหนีไฟไปมุมซ้ายบนหรือขวาล่างได้หรือไม่ใน Python

    คำอธิบายโจทย์ เมทริกซ์: 0=ว่าง, 1=คน, 2=ไฟ, 3=กำแพง ไฟขยาย 4 ทิศทางทีละเทิร์น (ไม่ทะลุกำแพง) คนเดินก่อน แล้วไฟขยาย ถ้าคนถึงมุมเป้าหมายพร้อมไฟก็รอด ตรวจสอบว่าหนีไป (0,0) หรือ (R-1,C-1) ได้ไหม ตัวอย่าง เมทริกซ์ 3x3 คนอยู่ (1,2) ไฟอยู่ (2,2) → True (หนีไป (0,0) ได้) วิธีแก้ปัญหา Multi-source BFS คำนว

  11. โปรแกรมนับจำนวนการพลิกตัวอักษรให้ x ทั้งหมดอยู่หน้า y ใน Python

    คำอธิบายโจทย์ ให้สตริง s ประกอบ x และ y เปลี่ยน x↔y ได้ หาจำนวนการเปลี่ยนน้อยที่สุดเพื่อให้ x ทุกตัวอยู่หน้า y ทุกตัว (รูปแบบ x...xy...y) ตัวอย่าง s = yxyyyyxyxx → เอาต์พุต: 4 วิธีแก้ปัญหา Greedy / Prefix Counting: นับ x ทั้งหมด = x_right (จะอยู่ขวาสุด) สแกนซ้ายไปขวา: y_left = จำนวน y ที่ผ่านมา,

  12. โปรแกรมเช็คว่าสตริงเป้าหมายสร้างได้จากการรวมสองสตริงหรือไม่ใน Python

    คำอธิบายโจทย์ ให้สตริง s, t, r ตรวจสอบว่า r สามารถสร้างได้จากการ interleaving (รวมสลับกัน) ตัวอักษรของ s และ t โดยรักษาลำดับสัมพัทธ์ภายในแต่ละสตริง ตัวอย่าง s = xyz, t = mno, r = xymnoz → True (x จาก s, y จาก s, mno จาก t, z จาก s) วิธีแก้ปัญหา Recursive DP (Memoization): ถ้าทั้งสามว่าง → True ถ้

  13. โปรแกรมนับจำนวนการเรียงสับเปลี่ยนที่ผลรวมคู่ติดกันเป็นกำลังสองใน Python

    คำอธิบายโจทย์ ให้รายการ nums หาจำนวน permutation ที่ผลรวมของทุกคู่ติดกันเป็น perfect square (กำลังสองสมบูรณ์) ตัวอย่าง nums = [2, 9, 7] → เอาต์พุต: 2 ([2,7,9] และ [9,7,2]) วิธีแก้ปัญหา Backtracking + Pruning: สร้าง permutation ทีละตัวโดย swap i ที่ nums[i] + nums[j] เป็น perfect square ใช้ visit

  14. โปรแกรมเช็คว่าผู้เล่นคนแรกหยีบลูกอมได้มากกว่าคนที่สองหรือไม่ใน Python

    คำอธิบายโจทย์ 0 หรือไม่ ตัวอย่าง candies = [1, 4, 3, 8] → True (คนแรกหยิบ 8 แล้วไม่ว่าคนที่ 2 จะหยิบ 1 หรือ 3 คนแรกก็ชนะ) วิธีแก้ปัญหา Recursive DP (Minimax): difference(left, right) = คะแนนสูงสุดที่ผู้เล่นปัจจุบันทำได้มากกว่าคู่แข่ง จากช่วง [left, right] เลือกซ้าย: candies[left] - difference(le

  15. โปรแกรมเช็คว่าผู้เล่นคนที่ 1 ชนะเกมลูกอมได้หรือไม่ใน Python

    คำอธิบายโจทย์ เกม 2 คน ลูกอมเรียงเป็นแถว ค่าคะแนนใน nums แต่ละรอบหยิบ 1-3 ลูกอมจากด้านหน้า ได้คะแนนเท่าผลรวม ลูกอมถูกนำออก จบเมื่อลูกอมหาย คนคะแนนมากกว่าชนะ เช็คว่าคนแรกชนะได้หรือไม่ ตัวอย่าง nums = [1, 1, 2, 3, 50] → True (คนแรกหยิบ 1 แล้วคนที่ 2 หยิบ 1-3 ตัว คนแรกได้หยิบ 50) วิธีแก้ปัญหา DP แบบ

  16. โปรแกรมหาเหรียญสูงสุดที่เก็บได้จากเมทริกซ์เดิน 4 ทิศทางใน Python

    คำอธิบายโจทย์ ให้เมทริกซ์ 2D ค่า = จำนวนเหรียญ เริ่มที่ตำแหน่งไหนก็ได้ เดิน 4 ทิศทาง (บน ล่าง ซ้าย ขวา) เก็บเหรียญแล้วเซลล์กลายเป็น 0 ไม่สามารถเดินเข้าสู่เซลล์ 0 ได้ หาเหรียญสูงสุดที่เก็บได้ ตัวอย่าง เมทริกซ์: 243 360 2012 เอาต์พุต: 18 (เส้นทาง 2→3→6→4→3) วิธีแก้ปัญหา DFS + Backtracking ลองเริ

  17. โปรแกรมหาเหรียญสูงสุดจากมุมซ้ายบนไปขวาล่างและกลับมาใน Python

    คำอธิบายโจทย์ ให้เมทริกซ์ 2D ค่า: 0=ว่าง, 1=เหรียญ, -1=กำแพง เริ่มที่ (0,0) ไป (n-1,m-1) เดินขวา/ล่างเท่านั้น แล้วกลับมา (0,0) เดินซ้าย/บนเท่านั้น เหรียญเก็บได้ครั้งเดียว (เซลล์กลายเป็น 0) หาเหรียญสูงสุด ถ้าไปไม่ถึงปลายทางคืน 0 ตัวอย่าง เมทริกซ์ 4x3 → เอาต์พุต: 8 วิธีแก้ปัญหา มองว่าเป็น 2 คนเดินจา

  18. โปรแกรมนับวิธีแบ่งสตริงตัวเลขเป็นรายการค่าที่อยู่ในช่วง 1 ถึง k ใน Python

    คำอธิบายโจทย์ ให้สตริง s ประกอบด้วยตัวเลข 0-9 และค่า k หาจำนวนวิธีแตก s เป็นรายการตัวเลขที่ทุกตัวอยู่ใน [1, k] ผลลัพธ์ mod 10^9+7 ตัวอย่าง s = 3456, k = 500 → เอาต์พุต: 7 วิธี: [3,4,5,6], [34,5,6], [3,4,56], [3,45,6], [34,56], [345,6], [3,456] วิธีแก้ปัญหา Dynamic Programming แบบ Bottom-up: dp[i]

  19. โปรแกรมนับจำนวนรูปทรงเกาะที่แตกต่างกันในเมทริกซ์ใน Python

    คำอธิบายโจทย์ ให้เมทริกซ์ไบนารี 2D 1=ที่ดิน 0=น้ำ เกาะคือกลุ่ม 1 ที่ติดกัน (4 ทิศทาง) สองเกาะถือว่ารูปทรงต่างกันถ้ารูปร่างไม่เหมือนกัน (ไม่พิจารณาตำแหน่ง) หาจำนวนรูปทรงเกาะที่แตกต่างกัน ตัวอย่าง เมทริกซ์ 6x5 → เอาต์พุต: 4 (มี 4 รูปทรงที่แตกต่างกัน) วิธีแก้ปัญหา ใช้ DFS + Normalization ของรูปทรง:

  20. โปรแกรมหาลำดับการเรียงสับเปลี่ยน lexicographic ลำดับที่ k จาก 1 ถึง n ใน Python

    คำอธิบายโจทย์ ให้ค่า n และ k พิจารณาการเรียงสับเปลี่ยน (permutation) ของ [1, 2, ..., n] ตามลำดับ lexicographic หาลำดับที่ k (1-indexed) เป็นสตริง ตัวอย่าง n = 4, k = 5 → เอาต์พุต: 1432 (ลำดับที่ 5 ของ 1234, 1243, 1324, 1342, 1432, ...) วิธีแก้ปัญหา ใช้ Factorial Number System (Factoradic): แปลง k

Total 9001 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:205/451  20-คอมพิวเตอร์/Page Goto:1 199 200 201 202 203 204 205 206 207 208 209 210 211