本文共 1203 字,大约阅读时间需要 4 分钟。
要解决这个问题,我们需要判断给定的整型数组中的每个数字是否可以表示为数字k的不同次方的和,其中每个指数不能重复使用。我们可以通过将每个数字转换为k进制,并检查每个位上的数字是否为0或1来解决这个问题。
#includeusing namespace std;bool spilt(ll x, int k, bool* num) { int cou = 0; while (x) { int temp = x % k; x /= k; if (temp > 1) return false; if (temp && num[cou]) return false; if (temp) num[cou] = true; cou++; } return true;}int main() { int t; cin >> t; while (t--) { bool* num = new bool[100]; int n, k; cin >> n >> k; ll x; bool possible = true; for (int i = 1; i <= n; ++i) { cin >> x; if (!spilt(x, k, num)) { possible = false; break; } } if (possible) { cout << "YES" << endl; } else { cout << "NO" << endl; } delete[] num; } return 0;}
通过这种方法,我们可以高效地判断每个数字是否能表示为k的不同次方的和,并确保每个指数只使用一次。
转载地址:http://fbetz.baihongyu.com/