B - Cube HDU - 1220 (數學計數)
阿新 • • 發佈:2018-10-10
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 (數學計數)