Codeforces #257 (Div. 2) C. Jzzhu and Chocolate

来源:互联网 发布:中南民族大学网络教育 编辑:程序博客网 时间:2024/05/21 10:01

简单数学题啊抓狂

就是抽象模型有点难,还有数据类型要注意!!

设横着划分为x行,竖着划分为y列

则最多可划分为(n/(x+1))*(m/(y+1))

注意一定要写成这种形式!!!原因在于n=3,m=3,x=1,y=1时这个式子和n*m/(x+1)/(y+1)的区别

其中x+y==k

所以分母可以划为开口向下一元二次方程

取其值范围的两个端点值,比较后输出最大值即可

注意要用long long不然会跪

代码如下:

#include <cstdio>#include <iostream>#include <algorithm>#define MAXN 10010#define LL long longusing namespace std;LL n, m, k;int main(void) {    LL e1, e2, ans1, ans2, i;    while(cin >> n >> m >> k) {        if(n+m-2 < k)            cout << "-1" << endl;        else {            e1 = max(k+1-m, 0ll);            e2 = min(k, n-1);            ans1 = e1;            ans2 = e2;            ans1 = max((n/(ans1+1))*(m/(k-ans1+1)), (n/(ans2+1))*(m/(k-ans2+1)));            cout << ans1 << endl;        }    }    return 0;}


0 0