原題:
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ù)坟冲,表示最多的滿足條件的長(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);
}