คำชี้แจงปัญหา
กำหนดอาร์เรย์ของจำนวนเต็ม N ค่าระดับบิต OR ขององค์ประกอบทั้งหมดของอาร์เรย์ต้องขยายให้ใหญ่สุดโดยดำเนินการหนึ่งงาน ภารกิจคือการคูณองค์ประกอบใด ๆ ของอาร์เรย์ที่มากที่สุด k ครั้งด้วยจำนวนเต็มที่กำหนด x
หากอาร์เรย์อินพุตคือ {4, 3, 6, 1}, k =2 และ x =3 ค่าสูงสุดที่ได้คือ 55
อัลกอริทึม
<ก่อน>1. คูณองค์ประกอบอาร์เรย์ด้วย (x^k) และทำระดับบิต OR กับระดับบิต OR ขององค์ประกอบก่อนหน้าทั้งหมด2 คูณองค์ประกอบอาร์เรย์ด้วย OR ระดับบิตขององค์ประกอบถัดไปทั้งหมด3 ส่งคืนค่าสูงสุดหลังจากการทำซ้ำทั้งหมดตัวอย่าง
#includeใช้เนมสเปซ std;int getMaxOr(int *arr, int n, int k, int x){ int prefixSum[n + 1]; คำต่อท้าย intSum[n + 1]; กำลังไฟฟ้าภายใน =1; สำหรับ (int i =0; i =0; --i) { suffixSum[i] =suffixSum[i + 1] | arr[i]; } ผลลัพธ์ int =INT_MIN; สำหรับ (int i =0; i ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−
ผลลัพธ์ =55