1. 程式人生 > >B - Cube HDU - 1220 (數學計數)

B - Cube HDU - 1220 (數學計數)

printf 怎麽 多少 思路 出現 頂點 沒有 fine define

題意:一個邊長為N的正方體,切割成N*N*N個單位正方體,問有多少對正方體之間有0個,2個公共點。

思路:因為正方體之間出現公共點的情況有0,2,4. 那麽直接正面求,肯定不好求,那麽先求出有4個公共頂點的對數m。

   怎麽求呢?通過觀察,其實就是外面的一個面沒有相鄰小正方體,其他都相鄰了,那就是總的小正方體的總面數-在表面的面數就可以了

   同時,求的是對數,所以最後不要忘了除以2. 公式 (N*N*N*6 - N*N*6)/3 在代碼中只是把它化簡了

#include<cstdio>
#define ll long long

int main()
{
    ll N;
    
while (scanf("%lld", &N) != EOF) { if (N == 1)printf("0\n"); else{ ll pop = N*N*(N - 1) * 3; ll n = N*N*N; ll ans = n*(n - 1) / 2 - pop; printf("%lld\n", ans); } } }

B - Cube HDU - 1220 (數學計數)