长方形个数

来源:互联网 发布:可靠的网络传输 编辑:程序博客网 时间:2024/04/29 17:34

长方形的个数:给定行列在交叉点处放置石子,石子最优放置,使得四个顶点都是石子的长方形最多多少个

http://www.cnblogs.com/cyjb/archive/2013/04/09/BeautyOfProgramming13Rectangle.html

//source here#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <map>#include <vector>#include <cmath>using namespace std;int main(){long long T,n,m,k;cin>>T;long long c = 1;while(T--){cin>>n>>m>>k;if(n>m)swap(n,m);long long a,b;long long mans = 0;int maxa = (int)ceil(sqrt((double)k));        if (maxa > n) maxa = n;for(a = 2; a <=maxa; a++){b = k / a;if(b > m)    continue;//不超过给定的列数long long r = k - a * b;long long ans = a * (a - 1) / 2 * b * (b - 1) / 2;if(r > a)continue;long long tt = r;//超过行数a的石子没有意义if(b < m && tt >= 2)//如果列数可以添加并且石子个数>=2{ans += b * tt * (tt - 1) / 2;r = 0;}if(r > b)continue;tt =  r;//超过列数b的石子没有意义if(a < n && tt >=2)//如果行数可以添加并且石子个数>=2{ans += a * tt * (tt - 1) / 2;}mans = max(mans, ans);}cout<<"Case #"<<c++<<": "<<mans<<endl;}return 0;}


0 0
原创粉丝点击