给定正四面体。所有边缘被分成N个相等的段。在这个四面体内部可以建立多少个具有顶点的非退化(|体积|> 0)四面体?给定四面体的顶点不能作为除法点。
示例:
Here is the answer with some pseudo-code,但我没有将最后一步转换为C ++。这是我到目前为止所做的:
typedef unsigned long long ulong;
ulong histogram[3002];
int main() {
memset(&histogram[0],0,sizeof(ulong)*3002);
ulong N;
cin >> N;
ulong m = N-1;
ulong u,U,z,Z;
ulong tetra = 3*m*m*(53*m*m-34*m+1)/4;
for( u = 1; u < N; u++) {
U = u/(N-u);
for( z = 1; z < N; z++) {
Z = z/(N-z);
histogram[U*Z]++;
}
}
// How to write the following steps in C++?
/*number_degen = 0;
foreach fraction in histogram {
number_degen += histogram{fraction}^2;
}*/
// I am trying something like this
ulong number_degen = 0;
for (int i = 0; i<3002; i++)
number_degen += histogram[i] * histogram[i];
cout<<number_degen<<endl;
cout<<tetra-3*number_degen<<endl;
}
“number_degen”=“950404”如果N = 37,则必须是4836
答案 0 :(得分:2)
一个问题(可能是你的实现中唯一缺少的)就是你如何使用C ++(以及许多其他语言)中的方块:
number_degen += histogram[fraction] ^ 2; // <-- wrong!
C ++中的^
运算符将不评估两个数字的幂,但是它们的按位XOR组合。要取两个数字的平方,您有两种可能性:将数字乘以其自身或将其乘以2的幂。对于整数,第一个应该是首选,因为取一个数的幂会产生一个浮点数。
number_degen += histogram[fraction] * histogram[fraction];