#include #include using namespace std; const int MAXS = 15; const int EMPTY = 0; const int NOSQ = -1; long fact[MAXS+1]; int grid[MAXS][MAXS]; int numr, numc; int pcount; bool nextEmptySq(int rows, int cols, int& newr, int& newc) { if (++newc == cols) { newr++; newc=0; } while (newr < rows) { if (grid[newr][newc] == EMPTY) return true; if (++newc == cols) { newr++; newc=0; } } return false; } bool okToPlace(double v, int r, int c) { if (grid[r][c] == v) return false; for(int row=0; row= 0 && sets[newIndex+1] == sets[newIndex]) { newStartr = firstr; newStartc = firstc; countPlacements(sets, newIndex, newCount, val+1, newStartr, newStartc, firstr, firstc, true, numr, numc); } else { newStartr = 0; newStartc = -1; countPlacements(sets, newIndex, newCount, val+1, newStartr, newStartc, firstr, firstc, true, numr, numc); } } else { countPlacements(sets, newIndex, newCount, val, newStartr, newStartc, firstr, firstc, false, numr, numc); } grid[r][c] = EMPTY; } } } long countPlacements(int comps[], int size, int numr, int numc) { int sets[MAXS] = {0}, reps[10] = {0}; int count = 1; for(int i=1; i numr || count > numc) return 0; } else { reps[count]++; count = 1; } } reps[count]++; int m=0; for(int i=1; i<=9; i++) { for(int j=0; j> r >> c; rlist[0] = minr = maxr = r; clist[0] = minc = maxc = c; for(int i=1; i> r >> c; if (r < minr) minr = r; else if (r > maxr) maxr = r; if (c < minc) minc = c; else if (c > maxc) maxc = c; rlist[i] = r, clist[i] = c; } numr = maxr-minr+1; numc = maxc-minc+1; for(int r=0; r= n) return 0; else return 2*(n-target); } int numDiv(int target, int n) { if (target <= 1) return 0; else return 2*(n/target); } long numAdd(int target, int n, int numsq, int comps[], int nc) { if (target == 0 && nc == numsq) { //for(int i=0; i= 0 && nc < numsq) { target -= n; comps[nc++] = n; ans += numAdd(target, n-1, numsq, comps, nc); } return ans; } } long numMul(int target, int n, int numsq, int comps[], int nc) { if (target == 1) { for(int i=nc; i> n; cin >> m >> target >> op; input(m); switch (op) { case '-' : cout << numSub(target, n); break; case '/' : cout << numDiv(target, n); break; case '+' : cout << numAdd(target, n, m, comps, 0); break; case '*' : cout << numMul(target, n, m, comps, 0); break; } cout << endl; // int sets[MAXS] = {1, 1, 1, 1, 1, 2}; // long ans = countPlacements(sets, 6, numr, numc); // cout << ans << endl; }