時間限制: 1 sec 記憶體限制: 128 mb
提交: 56 解決: 6
[提交][狀態][討論版]
在乙個3*2的矩形中,可以找到6個1*1的矩形,4個2*1的矩形3個1*2的矩形,2個2*2的矩形,2個3*1的矩形和1個3*2的矩形,總共18個矩形。
給出a,b,計算可以從中找到多少個矩形。
本題有多組輸入資料(<10000),當a,b同時問 0 時 結束
輸入2個整數a,b(1<=a,b<=1000)
輸出找到的矩形數。
1 23 20 0
3很輕易可以發現就是1*1的,1*2的,2*1的,2*2的,3*1的,3*2的。18
也就說在a*b的矩陣中可以找到
1*1,1*2,.....,1*b+
2*1,.....,2*b+
.......+
a*1,.....,a*b個小矩陣。
所以直接用兩重迴圈來解決,可是提交時發現超時了...
#include int main()
return 0;
}
於是上網搜了下這個的公式,是這樣的(a+1)*a/2*(b+1)*b/2
其實這個公式也是很好理解的,長肯定是從1到a,寬是從1到b,也已直接用所有長的和乘上所有寬的和。
數學證明:以3*2的矩陣為例
1*1+1*2+1*3+2*1+2*2+2*3=1*(1+2+3)+2(1+2+3)=(1+2)*(1+2+3)=18
注意這樣做法下,在數字很大時,超出了int 的表示範圍,所以用long long型。
但這裡遇到了一些問題,long long 型的輸入輸出我一般用的時%i64d,codeblocks中也不會報錯,但是在oj上測試執行樣例時結果變成了這樣,交了後的錯誤答案也都是前面有許多個空格,如圖所示。
於是換了下輸入輸出用%lld,測試資料倒是沒問題,可是編譯器又會警告。
下面將去查詢相關資料比較%lld和%i64d的區別,還有__int64。反正這道題還是有一組資料就是過不去,我也是沒辦法了,留在以後解決吧。看到這篇文章的可以幫忙看下下面**問題出在哪。
#includeint main()
return 0;
}
矩形的個數
時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 在乙個3 2的矩形中,可以找到6個1 1的矩形,4個2 1的矩形3個1 2的矩形,2個2 2的矩形,2個3 1的矩形和1個3 2的矩形,總共18個矩形。給出a,b,計算可以從中找到多少個矩形。輸入 本題有多組輸入資料 10000...
矩形的個數
時間限制 1000 ms 記憶體限制 65535kb 難度 1 描述 在乙個3 2的矩形中,可以找到6個1 1的矩形,4個2 1的矩形3個1 2的矩形,2個2 2的矩形,2個3 1的矩形和1個3 2的矩形,總共18個矩形。給出a,b,計算可以從中找到多少個矩形。輸入 本題有多組輸入資料 10000 ...
矩形的個數
描述 在乙個3 2的矩形中,可以找到6個1 1的矩形,4個2 1的矩形3個1 2的矩形,2個2 2的矩形,2個3 1的矩形和1個3 2的矩形,總共18個矩形。給出a,b,計算可以從中找到多少個矩形。輸入本題有多組輸入資料 10000 你必須處理到eof為止 輸入2個整數a,b 1 a,b 1000 ...