PC/UVa:110908/10276
这是一个模拟题,可以依次模拟到第51
根柱子,然后查表就行了。
对于每一个球,如果不能放在其它球的上面,那么就要放在一个新的柱子上,并且后续球放在其它球上时,相加所得的平方数的平方根加1
。
#include <iostream>
#include <vector>
#define MAX_N 51
using namespace std;
void simulation(vector<vector<int>> &pegs)
{
size_t i = 1;
pegs[0].push_back(1);
int ball = 2, sqrt = 1;
while (i < MAX_N){
while (1){
bool bPlace = false;
for (size_t j = 0; j < i; j++)
{
if (pegs[j].back() + ball == sqrt * sqrt){
pegs[j].push_back(ball++);
bPlace = true;
break;
}
}
if (!bPlace) break;
}
pegs[i++].push_back(ball++);
sqrt++;
}
}
int main()
{
vector<vector<int>> pegs(MAX_N, vector<int>());
simulation(pegs);
int T;
cin >> T;
for (int t = 0; t < T; t++)
{
int N;
cin >> N;
cout << pegs[N].front() - 1 << endl;
}
return 0;
}
/*
2
4
25
*/