문제

링크

풀이

#include <iostream>
#include <vector>
using namespace std;
 
vector<vector<int> > dp(1<<15, vector<int>(5, 0));
 
void precompute(void) {
  for (int i=1; i*i<(1<<15); i++) {
    dp[i*i][1] = 1;
    for (int j=1; j+i*i<(1<<15); j++) {
      dp[i*i+j][2] += dp[j][1];
      dp[i*i+j][3] += dp[j][2];
      dp[i*i+j][4] += dp[j][3];
    }
  }
}
 
bool solve(void) {
  int n;
  cin >> n;
  if (n == 0) return false;
 
  cout << dp[n][1] + dp[n][2] + dp[n][3] + dp[n][4] << "\n";
  return true;
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  precompute();
  while (solve());
  return 0;
}