Guest User

Untitled

a guest
Jun 20th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <numeric>
  5. #include <cmath>
  6. using namespace std;
  7.  
  8. #define FOR(i,a,b) for(int i=(a);i<(b);i++)
  9.  
  10. const int MAX_SUM = 20 * (9*9);
  11.  
  12. bool isSquare[MAX_SUM + 1];
  13.  
  14. bool isGood(vector<int>& cnt){
  15. int sum = 0;
  16. FOR(d,0,10) sum += cnt[d] * d * d;
  17. return isSquare[sum];
  18. }
  19.  
  20. long long doit(vector<int>& cnt){
  21. if( accumulate(cnt.begin(), cnt.end(), 0) == 20 ){
  22. return isGood(cnt) ? 1 : 0;
  23. }
  24. long long ret = 0;
  25. FOR(d,0,10){
  26. cnt[d]++;
  27. ret += doit(cnt);
  28. cnt[d]--;
  29. }
  30. return ret;
  31. }
  32.  
  33. int main(){
  34. for( int n = 0; n*n <= MAX_SUM; n++ ) isSquare[n*n] = true;
  35. vector<int> cnt(10, 0);
  36. cout << doit(cnt) << endl;
  37. }
Add Comment
Please, Sign In to add comment