Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เพิ่มค่าบิต OR สูงสุดของอาร์เรย์ใน C++


คำชี้แจงปัญหา

กำหนดอาร์เรย์ของจำนวนเต็ม 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