#include <bits/stdc++.h>
using namespace std;
vector<int> num;
long long solve(int N,int M,int max)
{
if(N==0 || M==0) return 0;
while(num[max]>N || num[max]>M) max--;
long long x= N/num[max];
long long y = M/num[max];
long long res= x*y;
return solve(N -x*num[max],num[max]*y,max)+solve(N,M-num[max]*y,max)+res;
}
int main()
{
int N,M;cin>>N>>M;
int q;cin>>q;
num.resize(q,0);
for(int i=0;i<q;i++)cin>>num[i];
if(M%num[0] !=0 || N%num[0]!= 0)
{
cout<<-1;
}
else cout<<solve(N,M,q-1);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <bits/stdc++.h> using namespace std; vector<int> num; long long solve(int N,int M,int max) { if(N==0 || M==0) return 0; while(num[max]>N || num[max]>M) max--; long long x= N/num[max]; long long y = M/num[max]; long long res= x*y; return solve(N -x*num[max],num[max]*y,max)+solve(N,M-num[max]*y,max)+res; } int main() { int N,M;cin>>N>>M; int q;cin>>q; num.resize(q,0); for(int i=0;i<q;i++)cin>>num[i]; if(M%num[0] !=0 || N%num[0]!= 0) { cout<<-1; } else cout<<solve(N,M,q-1); } |
English