#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); } |