立体井字棋
题目大意:
在一个n×n×n的正方体中,由n个格子连成一条直线的方案数(多少种可能用n个格子连成一条直线)
样例输入
2
样例输出
28
数据范围限制
对于30%的数据, n<=10;
对于100%的数据, n <= 1000。
解题思路:
这道题很显然是一道推理题,他有两种方法,我们先讲一下众多人使用的方法一:
首先我们在这个方形外面围上一层正方形(如下图),因为长度两边都加了一,多以大正方形的体积是(n+2)3(n+2)^{3}(n+2)3,而红色部分,原来的正方形体积为n3n^{3}n3,就可以求出外面围了(n+2)3−n3(n+2)^{3}-n^{3}(n+2)3−n3个正方形,然后运用两点确定一条直线的定理,还有把符合题意的每一条线延长可以穿过外面的两个正方形,可以得知符合题意的正方形个数为(n+2)3−n32\frac{(n+2)^{3}-n^{3}}{2}2(n+2)3−n3
本蒟蒻使用的方法二:
把全图的线的种类分为三种(只有一个坐标的差异,两个坐标的差异,三个坐标的差异),然后又可以细分:第一种:从正面,左面,上面各分成4个(n×n个),总共3×n×n个,第二种:从正面两个45度角,侧面两个,上面两个各有n个,总共6n个,第三种:是四个斜对角,就4个
总共3×n×n+6n+43×n×n+6n+43×n×n+6n+4个
#include<cstdio>
#include<iostream>
using namespace std;
int n;
int main()
{scanf("%d",&n);if (n==1) printf("1");else printf("%d",n*n*3+n*6+4);return 0;
}