#include <bits/stdc++.h> using namespace std; const long long INF = 1e18; const int MAXN = 33; long long t[MAXN]; bool b=0; long long x,ans,x1; int n; long long f(long long h,long long w){ int i; long long x=0; //cout<<"h="<<h<<" w="<<w<<'\n'; for(i=n;i>=1;i--){ if(t[i]<=min(h,w)){ x1=w/t[i]; x=x1*(h/t[i]); break; } } //cout<<t[i]<<' '<<x<<'\n'; if(x*t[i]==h*w) return x; else if(x==0){ b=1; return -1; } else{ if(h%t[i]>0){ return x+f(h%t[i],w)+f(h-h%t[i],w%t[i]); } else{ long long xd=f(h,w%t[i]); //cout<<"h="<<h<<" w="<<w<<" r="<<x+xd<<'\n'; return x+xd; } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long h,w; cin>>h>>w>>n; for(int i=1;i<=n;i++){ cin>>t[i]; } ans=f(h,w); if(b==1) cout<<-1<<'\n'; else cout<<ans<<'\n'; return 0; }
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <bits/stdc++.h> using namespace std; const long long INF = 1e18; const int MAXN = 33; long long t[MAXN]; bool b=0; long long x,ans,x1; int n; long long f(long long h,long long w){ int i; long long x=0; //cout<<"h="<<h<<" w="<<w<<'\n'; for(i=n;i>=1;i--){ if(t[i]<=min(h,w)){ x1=w/t[i]; x=x1*(h/t[i]); break; } } //cout<<t[i]<<' '<<x<<'\n'; if(x*t[i]==h*w) return x; else if(x==0){ b=1; return -1; } else{ if(h%t[i]>0){ return x+f(h%t[i],w)+f(h-h%t[i],w%t[i]); } else{ long long xd=f(h,w%t[i]); //cout<<"h="<<h<<" w="<<w<<" r="<<x+xd<<'\n'; return x+xd; } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long h,w; cin>>h>>w>>n; for(int i=1;i<=n;i++){ cin>>t[i]; } ans=f(h,w); if(b==1) cout<<-1<<'\n'; else cout<<ans<<'\n'; return 0; } |