Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|
43740 | huimzhangjian | 组合 | C++ | 通过 | 1 MS | 252 KB | 733 | 2024-03-21 11:37:44 |
#include <iostream> using namespace std; // 找两个数的最大公约数 int gcd(int a,int b){ if(a%b==0)return b; else return gcd(b,a%b); } int a[25]; bool f[10005]; int main(){ int n; cin>>n; cin>>a[0]; int g=a[0]; f[a[0]]=1; for(int i=1;i<n;i++){ cin>>a[i]; // 找n个数的最大公约数 g=gcd(g,a[i]); // 标记a[i] f[a[i]]=1; } // n个数不能互质,则不能组合的数字有无限个 if(g!=1){ cout<<-1; return 0; } // 标记所以可能的组合 for(int i=1;i<10000;i++){ if(f[i]==1) for(int j=0;j<n;j++){ f[i+a[j]]=1; } } // 统计不可能的组合 int cnt=0; for(int i=1;i<10000;i++) if(f[i]==0)cnt++; cout<<cnt; return 0; }