Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมนับมื้ออาหารที่ดีที่มีสองรายการพอดีใน Python


สมมติว่าเรามีอาร์เรย์ deli โดย deli[i] คือความอร่อยของอาหารชิ้นที่ i เราต้องหาจำนวนมื้ออาหารที่ดีที่แตกต่างกันที่เราสามารถทำจากรายการนี้ ถ้าคำตอบใหญ่เกินไป ให้ return ผลลัพธ์ modulo 10^9 + 7 ในที่นี้ มื้ออาหารที่ดี หมายถึงมื้ออาหารที่มีอาหารสองชนิดที่ต่างกันพอดี ซึ่งผลรวมของความอร่อยเป็นกำลังของสอง เราสามารถเลือกอาหารสองชนิดที่ต่างกันใดๆ เพื่อทำมื้ออาหารที่ดี

เช่น ถ้าอินพุตคือ deli = [1,7,3,6,5] ผลลัพธ์จะเป็น 3 เพราะเราสามารถจับคู่ (1,3), (1,7) และ (3,5) ซึ่งผลรวมเป็นกำลังของ 2

วิธีแก้ปัญหา

  • m := 10^9 + 7
  • count := แมปที่มีความถี่ของแต่ละค่าความอร่อย
  • ans := 0
  • สำหรับแต่ละ item i ใน count:
    • สำหรับ n ในช่วง 0 ถึง 21:
      • j := (2^n) - i
      • ถ้า j อยู่ใน count:
        • ถ้า i เท่ากับ j: ans := ans + count[i] * (count[i]-1)
        • มิฉะนั้น: ans := ans + count[i] * count[j]
  • return ผลหารของ (ans/2) mod m

ตัวอย่าง

from collections import Counter

def solve(deli):
    m = 10**9 + 7
    count = Counter(deli)
    ans = 0
    for i in count:
        for n in range(22):
            j = (1<

อินพุต

[1,7,3,6,5]

เอาต์พุต

3