CF31A Worms Evolution 题解
Content
有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试找出一个三元组 \((i,j,k)\),使得 \(a_i=a_j+a_k\)。
数据范围:\(3\leqslant n\leqslant 100,1\leqslant a_i\leqslant 1000,1\leqslant i,j,k\leqslant n,j\neq k\)。
Solution
由于数据范围很小,因此我们可以直接 \(\mathcal{O}(n^3)\) 枚举,每次枚举判断是否有一个数等于另外两个数的和就好了(注意,不能一个数同时取两次)。全枚举完了还没有找到,直接输出 \(-1\)。
Code
int n, a[107];
int main() {
getint(n);
_for(i, 1, n) getint(a[i]);
_for(k, 1, n)
_for(i, 1, n)
_for(j, 1, n)
if(a[i] + a[j] == a[k] && i != j) {
printf("%d %d %d", k, i, j);
return 0;
}
printf("-1");
return 0;
}