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;
}
posted @ 2021-12-15 22:04  Eason_AC  阅读(39)  评论(0)    收藏  举报