2017.07.08【NOIP提高組】模擬賽B組 長(zhǎng)方形(rectangle) 題解

原題:

http://172.16.0.132/senior/#contest/show/2041/0

題目描述:

雞腿是CZYZ的著名DS,但是不想學(xué)數(shù)學(xué)的DS不是好GFS,所以雞腿想通過(guò)提高數(shù)學(xué)水平來(lái)增強(qiáng)他的GFS氣質(zhì)!雖然你對(duì)雞腿很無(wú)語(yǔ),但是故事的設(shè)定是你幫助雞腿增強(qiáng)了GFS氣質(zhì),所以現(xiàn)在你必須教雞腿學(xué)數(shù)學(xué)!
雞腿想到了一個(gè)很高(sha)明(bi)的問(wèn)題,在 N 條水平線與 M 條豎直線構(gòu)成的網(wǎng)格中,放 K 枚石子,每個(gè)石子都只能放在網(wǎng)格的交叉點(diǎn)上。問(wèn)在最優(yōu)的擺放方式下,最多能找到多少四邊平行于坐標(biāo)軸的長(zhǎng)方形,它的四個(gè)角上都恰好放著一枚石子。

輸入:

一行輸入三個(gè)正整數(shù)N,M,K。

輸出:

一行輸出一個(gè)正整數(shù),表示最多的滿(mǎn)足條件的長(zhǎng)方形數(shù)量。

樣例輸入:

輸入1:
3 3 8
輸入2:
7 14 86

樣例輸出:

輸出1:
5
輸出2:
1398

數(shù)據(jù)范圍限制:

對(duì)于50%的數(shù)據(jù)0 < N, M ≤ 30;
對(duì)于100%的數(shù)據(jù)0 < N, M ≤ 30000;K ≤ N*M。

分析:

這是一道純數(shù)學(xué)題目,(沒(méi)AC得都不知道他們?cè)谙胄┦裁?....((/- -)/);
通過(guò)分析,我們不難得出一個(gè)公式:C(k/i,2)C(i,2)+C(k%i,2)k/i;

實(shí)現(xiàn):

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;

int i,x,n,m,k;
long long ans;
long long calc(int x) {return (x-1)*x/2;}
long long work(int x,int y) {return calc(x)*calc(y)+(y<m?y:x)*calc(k-x*y);}
int main()
{
    freopen("rectangle.in","r",stdin);freopen("rectangle.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    if(n>m) swap(n,m);
    ans=0;
    for(i=2;i<=min(n,(int)sqrt(k));i++)
    {
        x=min(m,k/i); 
        if(k>=x*(i+1)) continue;
        ans=max(ans,work(i,x));
    }
    printf("%lld\n",ans);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容