堆,数学。
inline int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
class Solution {
public:
typedef long long ll;
bool isPossible(vector<int>& a) {
int n=a.size();
priority_queue<int>q;
ll sum=0;
int g=0;
for(int i=0;i<n;i++){
q.push(a[i]),sum+=a[i];
g=gcd(g,a[i]);
}
if(sum==n)return 1;
if(g!=1)return 0;
while(true){
int tp=q.top();
q.pop();
if(tp==1&&sum==n)return 1;
sum-=tp;
if(tp<sum)return 0;
int x=tp%sum;
if(sum==1)x=1;
if(x==0&&sum!=1)return 0;
q.push(x);
sum+=x;
}
return 1;
}
};
京公网安备 11010502036488号