Jzzhu and Chocolate
2014-07-20 09:47
225 查看
CF#257 div2 C:http://codeforces.com/contest/450/problem/C
题意:n*m的方格,每次可以横着或者纵向的切一刀,问切k之后,最小的最大是多少。
题解:比赛的时候没有想到怎么处理,看了别人的题解,才恍然大悟。有一定的数学知识。最终块的大小平均来算是n(k1+1)*m/(k2+1),k1,k2分别表示横向切和纵向切的刀数,由于k1+k2==k,所以,要使得上述值最大,必须是(k1+1)*(k2+1)最小,就是让k1和k2 的差值越大即可。所以,我们总是把其中一维切完再切第二维。
View Code
题意:n*m的方格,每次可以横着或者纵向的切一刀,问切k之后,最小的最大是多少。
题解:比赛的时候没有想到怎么处理,看了别人的题解,才恍然大悟。有一定的数学知识。最终块的大小平均来算是n(k1+1)*m/(k2+1),k1,k2分别表示横向切和纵向切的刀数,由于k1+k2==k,所以,要使得上述值最大,必须是(k1+1)*(k2+1)最小,就是让k1和k2 的差值越大即可。所以,我们总是把其中一维切完再切第二维。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; long long n,m,k,ans; int main(){ while(~scanf("%I64d%I64d%I64d",&n,&m,&k)){ if(n+m-2<k)ans=-1; else if(n+m-2==k)ans=1; else { if(n-1>=k)ans=m*(n/(k+1)); else if(n-1<k)ans=m/(k-n+2); if(m-1<k)ans=max(ans,n/(k-m+2)); else ans=max(ans,n*(m/(k+1))); } printf("%I64d\n",ans); } }
View Code
相关文章推荐
- Codeforces 450 C. Jzzhu and Chocolate
- Codeforces #257 (Div. 2) C. Jzzhu and Chocolate
- Codeforces Round #257 (Div. 2)C. Jzzhu and Chocolate
- Codeforces Div. 2 #257-C. Jzzhu and Chocolate
- CodeForces 449A - Jzzhu and Chocolate(贪心)
- Codeforces Round #257 (Div. 1)449A - Jzzhu and Chocolate(贪婪、数学)
- Codeforces Round #257 (Div. 1) A - Jzzhu and Chocolate 2017/1/11
- Codeforces 450 C. Jzzhu and Chocolate
- Codeforces 449 A Jzzhu and Chocolate
- CodeForces 449A - Jzzhu and Chocolate
- Codeforces 450 C. Jzzhu and Chocolate
- CodeForces 449A Jzzhu and Chocolate
- Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate
- 449A - Jzzhu and Chocolate 贪心
- 449A - Jzzhu and Chocolate 贪心
- cf 450c Jzzhu and Chocolate
- (CF#257)C. Jzzhu and Chocolate
- Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate
- Codeforces Round #257 (Div. 1)449A - Jzzhu and Chocolate(贪心、数学)
- CodeForces 449-A. Jzzhu and Chocolate