ABC-276解题报告
D. Divide by 2 or 3
题意:给你一个数组
,每次可以选择一个 的倍数除以 ,或选择一个 的倍数除以三。问最少多少次操作将元素统一。无解输出 -1
。
如果有解,结果将会是
By zhoukangyang
#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector < int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define ld __float128
#define i128 __int128
using namespace std;
const int N = 1e6 + 7, mod = 998244353;
int n, m, a[N];
int main() {
// freopen("thewitness.in", "r", stdin);
// freopen("thewitness.out", "w", stdout);
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n ;
int g = 0;
L(i, 1, n) cin >> a[i], g = __gcd(a[i], g);
int ns = 0;
L(i, 1, n) {
a[i] /= g;
while(a[i] % 2 == 0) ++ns, a[i] /= 2;
while(a[i] % 3 == 0) ++ns, a[i] /= 3;
if(a[i] > 1) {
cout << -1 << '\n';
return 0;
}
}
cout << ns << '\n';
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步