前言:第2次打Codeforces ,又是被虐…
成绩:rating :??不知道在搞什么,系统分数重算中虽然也没多少分
通过:A
看了BC...无从下手
A. Perfectly Imperfect Array
给出一个数组,问:是否存在这个数组的某个子序列,其所有元素
的积不是一个完美数(完美数:某个整数的平方)。
水题,若一个子序列的积B为完美数,假设B = A x A , 此时混进去
一个不完美数,则积变为BxC = Axsqrt(C) x Axsqrt(C) 就不完美啦,所
以只要数组有一个不完美数就可以啦。
B. AND 0, Sum Big
给出整数n和k,你需要求出这样的数组的最多的数量:(有n个元素
的数组,所有的的元素在0~2*k-1之间,所有元素的与 为0 且所有元
素的和尽可能大)。
巧妙思维题。
二进制中,两个数与,只要一个数的第i位是0,则两个数与的结果
的第i位就为0。所以我们要每一位有1个0。
因为元素和要尽可能大,所以不妨先设所有元素都为2*k-1,这样所
有元素的二进制都有k位,且每位都是1。我们需要把k个0分配到这些
数上,那么就变成每次选择一个数的第i(0~k)位变成0,每次有n中
选择,要选择k次,那么选择的总方案数为n^k。
C. Product 1 Modulo N
给出整数n,选择1~n-1的最长子序列,其元素乘积prod%n==1。
恶心数学性质题。
我们先看看1~n-1中那些数不能选,这里由题目可以关联到一个公
式:gcd(prod%n,n) == gcd(prod,n) , 若prod%n==1,则
gcd(prod%n,n) == gcd(prod,n) == 1,这意味着prod与n是互质的,因此
所有不与n互质的数,不选。
对于所有与n互质的数,乘积为prod。
(1)若prod%n==1,那么这些数字就是题目的解;
(2)若prod%n!=1,设prod%n==p,已知prod与n互质,gcd(prod,n) ==
gcd(p,n) == 1,得p与n互质。所以p是已经被选到的数字,把他去掉,
就会有prod%n==p ---> prod/p%n==p/p==1 , 因此在与n互质的子序
列中去掉p即可。