2023/9/16
我给大家展示的是23秋季算法预科班 Contest02的第2题题目截屏如下
:
解释如下:
我们首先要理解题目中的0,1,2,4是什么(记得看题!!!)
1)4是什么?给你看一张图就明白了
看到我标红的点了吗?那就题目中的4,它的意思是两个正方体放一起重叠了4个顶点。
2)2也是同样的道理
3)1也是同样的道理
那你肯能问,0又是怎么一回事,其实很简单,因为我们是放正方体所以,是不是也可以放开图例如下:
理解完这个,那这道题就好理解了。
首先我们要先算出一共有多少个,先举个例子:3*3*3=27(个),那换成字母就是n*n*n;然后我们再看一遍题,它说要我们找的是有多少对单位正方体它们的顶点交点数量不超过2,那我们先找到有多少对,我们还是一样先举例:还是举3*3*3的正方体的例子,因为我们是要找两个一组连在一起的,所以算式如下:
换成算式就是27*26/2*1,然后再简单一点就是3*3*3*(3*3*3-1)/2*1,那换成字母表示就是n*n*n*(n*n*n-1)/2*1;
然后我们再想因为它要找的是不超过2的,不超过2的,它包括0、1、2,它不包过4,那不包括4的就是不包括两个挨在一起的,所以我们刚刚算的里面绝对有重复的,那重复的有几个呢?在下继续为您解释:直接盯着字母有点难看出规律,我们还是换成3*3*3的正方体举例。这时候一个一个数是真的慢,重点是怕错,所以有一个好方法来数,咱先看图:
这时候你可能就问了,3是什么,4是什么,然作者大大来告诉你:因为是3*3*3的正方体所以它有3层。接着是理解每一个方格中的数字,先看第一层,标“3”的方框表示这个小立方体(小立方体指的是3*3*3的正方体中分成单位为1的27个小立方体中的一个)它周围旁边的小立方体和它连着顶点交点为4的一共有几个,而且下不考虑重复,那右上角的”3“,就是右上角的小立方体连接着它右边、后边和下边的顶点交点个数为4的有3个。往后的以此类推。由于第1层和第3层是一样的所以我们就最后看一看的2层,又因为第2层在中间所以它图中每个小方格还要加1,最后我们把它写成算式就是
(3*4+4*4+5)*2+4*4+5*4+6
=3*8+4*8+5*2+4*4+5*4+3*2 (6换成2*3了)
=3*10+4*12+5*6
=3*10+3*16+3*10 (因为我们用的是3*3*3的正方体,所以提取的是3)
=3*36
我们最后化简成了3*36,不要以为现在就完了,我们刚刚算的时候没有去重,所以先在要去个重,就是
3*36/2
=3*18
=3*3*3*(3-1) 化成这样是为了待会儿化成字母
紧接着我们把这个算是换成字母,就是3*n*n*(n-1);
最后我们把公式连在一起n*n*n*(n*n*n-1)/2*1-3*n*n*(n-1),就OK啦!!!
最最最后我们再按照题目套公式:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long t,n;
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>n;
n=n*n*n*(n*n*n-1)/2*1-3*n*n*(n-1);
cout<<n<<endl;
}
return 0;
}
谢谢观看!!!