CF1514A Perfectly Imperfect Array 题解
Content
给定一个长度为 \(n\) 的序列,问是否存在一个非空子序列,使得这个子序列所有元素的积不是完全平方数。
数据范围:\(t\) 组数据,\(1\leqslant t\leqslant 100\),\(1\leqslant n\leqslant 100\),序列中的元素在 \(1\) 到 \(10^4\) 之间。
Solution
我们不难想到,如果这个序列中所有的元素都是完全平方数,那么肯定不存在积不是完全平方数的子序列,因为无论怎么取,积一定是完全平方数。
我们不妨稍微证明一下:设这个序列可以表示成 \(p_1^2,p_2^2,\dots,p_n^2\),然后假设存在积不是完全平方数的子序列,并且你取的元素的下标为 \(i_1,i_2\dots,i_k\),那么他们的积就是 \(\prod\limits_{j=1}^ka_{i_j}=\prod\limits_{j=1}^kp_{i_j}^2=(\prod\limits_{i=1}^kp_{i_j})^2\),显然这是一个完全平方数,与假设矛盾,故不存在积不是完全平方数的子序列。证毕。
我们再看,如果假设存在非完全平方数的元素,由于单个元素也能组成子序列,因此我们只需要取那个非完全平方数的元素,就可以满足题目要求。
那么这道题就写完了。
Code
int main() {
MT {
int n = Rint, fl = 0; while(n--) {
int x = Rint;
if((int)sqrt(x) * (int)sqrt(x) != x) fl = 1;
}
fl ? YES : NO;
}
return 0;
}

浙公网安备 33010602011771号