题目要求
abiimodpi=0
,也就是
ai
的每个素因子个数的
bi
倍都大于等于
pi
相应的因子个数。其实我们可以让
ai
只有一个素因子,比如说2,也就是如果存在解,那么一定存在
ai
均为2的整数幂的解。
设
sum=∑i=0n−1ai
我们得到一组不等式,对于所有的 i 有
∑i=0n−1bi≤1
当 bi 各不相等时,上式可以取等号,否则不能取等号。若满足了上式条件,一定能构造出解。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const double eps = 1e-10;
class DivisibleSetDiv1{
public:
string isPossible(vector<int> b){
sort(b.begin(),b.end());
const int n = b.size();
double sum = 0;
for(int i=0;i<n;i++){
sum += 1.0/(b[i]+1);
}
if(sum > 1.0 + eps){
return "Impossible";
}else if(sum > 1.0 - eps){
for(int i=0;i<n-1;i++){
if(b[i] == b[i+1]){
return "Impossible";
}
}
}
return "Possible";
}
};