#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <iomanip>
// #define __DEBUG
#define REP(x,n) for (int x=0;x<(n);++x)
#define VAR(x,n) __typeof(n) x = (n)
#define FOREACH(x,c) for(VAR(x, (c).begin()); x != (c).end(); ++x)
#define CONTAINS(x,elem) ((x).find(elem) != (x).end())
#ifdef __DEBUG
#define DEBUG(x) x
#else
#define DEBUG(x)
#endif
using namespace std;
long long solve();
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout << solve() << endl;
return 0;
}
#define MAX_N 31
long long sizes[MAX_N];
long long solve() {
int w,h;
int n;
cin>>h>>w>>n;
REP(x, n)
cin>>sizes[x];
if ((h % sizes[0]) || (w % sizes[0])) {
return -1;
}
long long* currentSize = sizes + n;
int remainingW = w, remainingH = h;
long long result = 0;
while (remainingW != 0 || remainingH != 0) {
if (currentSize == sizes) {
DEBUG(cerr << "Used all sizes, still no solution!" << endl;)
return -1;
} else {
--currentSize;
}
long long fitsW = remainingW / *currentSize;
long long fitsH = remainingH / *currentSize;
result += (fitsW ? fitsW * (h / *currentSize) : 0)
+ (fitsH ? fitsH * (w / *currentSize) : 0)
- (fitsW * fitsH);
DEBUG(cerr << "size = " << *currentSize
<< ": add " << (fitsW ? fitsW * (h / *currentSize) : 0)
<< " + " << (fitsH ? fitsH * (w / *currentSize) : 0)
<< " - " << (fitsW * fitsH) << " --> " << result << endl;)
remainingW -= fitsW * *currentSize;
remainingH -= fitsH * *currentSize;
}
return result;
}
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <iostream> #include <vector> #include <set> #include <algorithm> #include <iomanip> // #define __DEBUG #define REP(x,n) for (int x=0;x<(n);++x) #define VAR(x,n) __typeof(n) x = (n) #define FOREACH(x,c) for(VAR(x, (c).begin()); x != (c).end(); ++x) #define CONTAINS(x,elem) ((x).find(elem) != (x).end()) #ifdef __DEBUG #define DEBUG(x) x #else #define DEBUG(x) #endif using namespace std; long long solve(); int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout << solve() << endl; return 0; } #define MAX_N 31 long long sizes[MAX_N]; long long solve() { int w,h; int n; cin>>h>>w>>n; REP(x, n) cin>>sizes[x]; if ((h % sizes[0]) || (w % sizes[0])) { return -1; } long long* currentSize = sizes + n; int remainingW = w, remainingH = h; long long result = 0; while (remainingW != 0 || remainingH != 0) { if (currentSize == sizes) { DEBUG(cerr << "Used all sizes, still no solution!" << endl;) return -1; } else { --currentSize; } long long fitsW = remainingW / *currentSize; long long fitsH = remainingH / *currentSize; result += (fitsW ? fitsW * (h / *currentSize) : 0) + (fitsH ? fitsH * (w / *currentSize) : 0) - (fitsW * fitsH); DEBUG(cerr << "size = " << *currentSize << ": add " << (fitsW ? fitsW * (h / *currentSize) : 0) << " + " << (fitsH ? fitsH * (w / *currentSize) : 0) << " - " << (fitsW * fitsH) << " --> " << result << endl;) remainingW -= fitsW * *currentSize; remainingH -= fitsH * *currentSize; } return result; } |
English