


问题分析#
题目要求计算边长为 的立方体被平面 切割后,包含原点 的部分体积的 6 倍是多少。
立方体的范围为 ,平面 将空间分为两部分,并且包含原点的部分满足 。
核心思路#
根据 与立方体的位置关系,平面切割立方体的效果不同,需分类讨论:
- 平面在立方体外部():如图 1 ,此时 不包含立方体任何部分,。

- 平面切割出小四面体():如图 2-1 , 平面与立方体相交形成以原点为顶点的四面体,如图 2-2 ,体积可直接用 公式计算。

- 平面切割立方体中部():如图 3 ,平面与立方体的三个面相交,形成复杂区域,需通过几何分解推导体积公式。
- 平面靠近立方体对角顶点():如图 4 ,平面切割后形成以原点为顶点的七面体,。
- 平面完全在立方体外部():如图 5 ,整个立方体都满足 , 立方体体积公式。
公式推导#
- 当
此时 无立方体部分,6 倍体积为: - 当
平面切割出的区域是顶点为 的四面体。四面体体积公式为 ,因此 6 倍体积为: - 当
平面与立方体的三个面相交,需通过积分或几何分解计算。推导得 6 倍体积公式: - 当
包含原点的部分是整个立方体减去一个小四面体(顶点为 ,边长为 )。
立方体 6 倍体积为 ,小四面体 6 倍体积为 ,因此结果为: - 当
整个立方体都满足 ,6 倍体积为立方体体积的 6 倍:
代码实现#
根据上述推导,分情况计算结果:
#include<bits/stdc++.h>
using namespace std;
long long n,k,res;
int main(){
cin>>n>>k;
if(k==0){
res=0;
}else if(k<=n){
res=k*k*k;
}else if(k<=2*n){
res=3*k*k*n-3*k*n*n+n*n*n-2*(k-n)*(k-n)*(k-n);
}else if(k<=3*n){
res=6*n*n*n-(3*n-k)*(3*n-k)*(3*n-k);
}else{
res=6*n*n*n;
}
cout<<res<<endl;
return 0;
}cpp