ปัญหา
ได้รับฟังก์ชัน f(x, y) หาคู่ (x, y) ทั้งหมดที่ f(x, y) = z โดย z กำหนดให้ x, y เป็นจำนวนเต็มบวก ฟังก์ชันเพิ่มขึ้นเรื่อยๆ: f(x,y) < f(x+1,y) และ f(x,y) < f(x,y+1)
วิธีแก้
Brute Force: ลูป i=1..1000, j=1..1000 ถ้า f(i,j)==z เก็บคู่ (i,j)
Function ID: 1 = Addition, 2 = Multiplication พร้อมค่า z
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int>> v) {
cout << "[";
for (int i = 0; i < v.size(); i++) {
cout << "[";
for (int j = 0; j < v[i].size(); j++)
cout << v[i][j] << ", ";
cout << "],";
}
cout << "]" << endl;
}
class CustomFunction {
int id;
public:
CustomFunction(int id) { this->id = id; }
int f(int x, int y) {
if (id == 1) return y + x;
else if (id == 2) return y * x;
return 0;
}
};
class Solution {
public:
vector<vector<int>> findSolution(CustomFunction& c, int z) {
vector<vector<int>> ans;
for (int i = 1; i <= 1000; i++)
for (int j = 1; j <= 1000; j++)
if (c.f(i, j) == z) {
vector<int> t = {i, j};
ans.push_back(t);
}
return ans;
}
};
int main() {
Solution ob;
CustomFunction c(1);
print_vector(ob.findSolution(c, 7));
}
อินพุต
1 7
เอาต์พุต
[[1, 6, ],[2, 5, ],[3, 4, ],[4, 3, ],[5, 2, ],[6, 1, ],]
คำอธิบาย
Function ID 1 = Addition: x + y = 7 → คู่ (1,6), (2,5), (3,4), (4,3), (5,2), (6,1)
Function ID 2 = Multiplication: x * y = z
ข้อจำกัด x,y ≤ 1000 จากโจทย์