題解報告:hdu 1220 Cube

題目連接:http://acm.hdu.edu.cn/showproblem.php?pid=1220php

問題描述c++

  Cowl擅長解決數學問題。 有一天,一位朋友問他這樣一個問題:給你一個邊長爲N的立方體,它被與其側面平行的平面切割成N * N * N個單位立方體。 兩個單位立方體可能沒有共同點或兩個共同點或四個共同點。 你的工做是計算有多少對不超過兩個公共點的單位立方體。處理到文件的結尾。  測試

輸入spa

  會有不少測試用例。 每一個測試用例只會在一行中給出一個立方體的邊長N. N是正整數(1 <= N <= 30)。  code

輸出blog

   對於每一個測試用例,您應該在一行中輸出上面描述的對的數量。  ci

示例輸入 1    2    3  數學

示例輸出 0   16   297it

暗示 :結果不會超過int類型。class

解題思路:這是一道組合數學題。題目的意思就是有一個N*N*N的立方體,將其分紅1*1*1的單位立方體,則任意兩個立方體的交點(頂點)個數爲0,1,2,4個,如今要求交點數小於等於2個的立方體對數有多少對。N*N*N的立方體能夠分紅N*N*N個單位立方體,而任選兩個立方體組成的狀況一共有C(N*N*N,2)對 (即:N^3*(N^3-1)/2對)。公共點爲4的對數:一列有n-1對(n個小方塊,相鄰的兩個爲一對符合要求),一個面的共有 n^2列,選上面和左面,前面三個方向,同理可得,故總數爲:3*n*n*(n-1)。因此不超過兩個公共點的單位立方體的對數爲N^3*(N^3-1)/2-3*n*n*(n-1)。

AC代碼:

1 #include<bits/stdc++.h>
2 using namespace std; 3 int main() 4 { 5     int n; 6     while(cin>>n) 7         cout<<(n*n*n*(n*n*n-1)/2-3*n*n*(n-1))<<endl;//推導公式
8     return 0; 9 }
相關文章
相關標籤/搜索