题解:P15021 [UOI 2020 II Stage] 方程
XsIeEiKcEk · · 题解
显然可以暴力枚举。\ 然而这种算法太低级了,考虑使用橙题难度的搜索及回溯算法。
::::info[Code]
#include <iostream>
using namespace std;
int a[4], k;
int tmp[4];//答案数组
bool vis[4];//标记是否用过
inline bool check() {//检查是否正确
int x = tmp[1], y = tmp[2], z = tmp[3];
return (x * x * x + y * y + z == k);
}
inline void dfs(int k) {
if (k > 3) {
if (check()) {
cout << tmp[1] << ' ' << tmp[2] << ' ' << tmp[3];
exit(0);//退出程序
}
return ;
}
for (register int i = 1; i <= 3; ++i) {//一一遍历
if (vis[i]) {
continue;
}
tmp[k] = a[i];
vis[i] = true;
dfs(k + 1);
vis[i] = false;//回溯
}
}
int main() {
cin >> a[1] >> a[2] >> a[3] >> k;
dfs(1);
cout << "-1 -1 -1";//无解
return 0;
}
::::