标签:
4 75 150 75 50 3 100 150 250
Yes No
题意:
问这些数能否经过变成同一个数,变换为乘2或者3,乘的次数任意;
思路:
temp=a[i]*2^x*3*y;
可以发现
a[i]*2^x*3*y=a[j];
这里的x和y为整数;那么就可以搜索了;
AC代码:
#include <bits/stdc++.h> using namespace std; #define Riep(n) for(int i=1;i<=n;i++) #define Riop(n) for(int i=0;i<n;i++) #define Rjep(n) for(int j=1;j<=n;j++) #define Rjop(n) for(int j=0;j<n;j++) #define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; const LL mod=1e9+7; const double PI=acos(-1.0); const int inf=0x3f3f3f3f; const int N=1e5+5; int n; LL a[N]; map<LL,int>mp; int dfs(LL x) { mp[x]=1; if(2*x<=3e9+7&&!mp[2*x]) { dfs(2*x); } if(3*x<=3e9+7&&!mp[3*x]) { dfs(3*x); } if(x%2==0&&!mp[x/2]) { dfs(x/2); } if(x%3==0&&!mp[x/3]) { dfs(x/3); } } int solve() { for(int i=2;i<=n;i++) { if(!mp[a[i]]) { printf("No\n"); return 0; } } printf("Yes\n"); return 0; } int main() { while(scanf("%d",&n)!=EOF) { mp.clear(); Riep(n) { scanf("%lld",&a[i]); } dfs(a[1]); solve(); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zhangchengc919/p/5468885.html