编程之美一道简单的热身题,活生生的组合数学例子啊。

题意如下

在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。

输入

  输入文件包含多组测试数据。第一行,给出一个整数T(1 ≤ T ≤ 100)为数据组数。接下来依次给出每组测试数据。每组数据为三个用空格隔开的整数 N,M,K。(0 ≤ K ≤ N * M,0 < N, M ≤ 30000)。

输出

  对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y表示最多能找到的符合条件的长方形数量。所有数据按读入顺序从1开始编号。

样例输入


样例输出

Case #:
Case #:
Case #:

解题思路:

  考虑对于一个布满点的网格(x行,Y列),所有的矩形总数为组合数C(2,x)*C(2,y)。但k不一定刚好就能布满整个网格,所以我们先找到在网格中最大能形成的长方形矩阵的长y和宽x,剩余石子为r,则有k = x * y + r , 最大能形成的长方形矩阵最多有C(x,2)*C(y,2)个矩形,剩余石子 r 以一排或一列的形式,靠在大矩形短的一边(要注意是否到达边界),则多增加的矩形数为 C(2,r)*y (y为长边的点数)。 枚举x与y,计算出C(x,2)*C(y,2)+ C(r,2)*y的最大值。

代码如下:

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std; long long Func(long long n)
{
return n*(n-)/;
}
int main()
{
int T;
cin >> T;
for(int cnt = ; cnt <= T; ++cnt)
{
int n, m, k;
cin >> n >> m >> k;
if(n > m) swap(n,m);     //n为短边,m为长边(个人习惯~0~)
long long ans = ;
for(int x = ; x <= n; ++x) //对x进行枚举(短边)
{
int y = k / x;     //可能的最大长边y
int r = k % x;     //剩余的石子数r
if( y > m || ( y == m && r) ) //超边界
continue;
ans = max(ans, Func(x)*Func(y) + y*Func(r));
}
cout << "Case #" << cnt << ": " << ans << endl;
}
return ;
}

长方形—C++的更多相关文章

  1. 通过前台选择输入用来计算圆,三角形以及长方形的面积(此题目主要是while以及if 的使用)

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现计算圆面积,三角形面积,长方形面积'''flag=Truewhile flag: pi ...

  2. 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

    基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...

  3. UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)

    Sackler Museum of Art and Archaeology at Peking University is located on a beautiful site near the W ...

  4. 暴力枚举-数长方形(hdu5258)

    数长方形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. hdu 5258 数长方形 离散化

    数长方形 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5258 Des ...

  6. Project Euler 85 :Counting rectangles 数长方形

    Counting rectangles By counting carefully it can be seen that a rectangular grid measuring 3 by 2 co ...

  7. hdoj 1859 最小长方形

    最小长方形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. HDOJ(HDU) 1859 最小长方形(水题、、)

    Problem Description 给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内.长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内 ...

  9. Android长方形图片生成正圆形,以及矩形图片生成圆角

    一般要做正圆形图片,只能是正方形的基础上才能实现,否则就变成椭圆了,下面说说如何使长方形的图片生成正圆形图片 废话不多说,没图没真相,先上图吧: 原图:  变成正圆后:  下面上代码: public ...

随机推荐

  1. mysql创建PATH快捷

    1.使其临时生效 PATH=$PATH:/usr/local/mysql/bin 2.永久生效 编辑/etc/profile  添加第79列 然后source /etc/profile 3.输入命令m ...

  2. eclipse常用10个快捷键[转载]

    转载自:http://www.jb51.net/softjc/139467.html

  3. [Js]跟随鼠标移动的div

    例子:鼠标移动到一块东西上,出现提示文本框,并且提示文本框跟着鼠标的位置动 document.onmouseover=function(ev){ var oEvent=ev||event; var b ...

  4. Oracle创建表

    //创建表,列的内容 -- Create tablecreate table T_HQ_PC( pinpai VARCHAR2(20) not null, xingh VARCHAR2(40), ji ...

  5. node开发 npm install -g express-generator@4

    Node forever : 1,forever start --uid test start app.js 2,forever start --uid test start -a app.js 3, ...

  6. Phonebook 导入SD上的.vcf联系人

    2014-01-11 17:29:22 1. 当用户选择Phonebook中从SD卡导入联系人的操作后,程序回调转到ImportVCardActivity,然后用户选择好要导入的.vcf文件,并点击“ ...

  7. windbg调试C#代码(二)

    这篇主要讲如何分析高内存和高CPU. 1.如何分析高内存 注:如果抓Dump的同时,刚好在执行GC,抓出来的Dump执行命令多半会出错,用!VerifyHeap也能验证Dump有误,这种情况只能重新抓 ...

  8. Android 插入图片到媒体库

    今天介绍一下在Android中怎么插入图片到媒体库,下面看代码: final String titleName = Function.md5(imageUri.toLowerCase()) + &qu ...

  9. 高效率JAVA实现斐波那契

    import java.util.Scanner;public class Solution { public static int Fibonacci(int n) { int first = 0, ...

  10. 动态加载DLL函数GetProcAddress错误

    GetLastError获取错误代码127,指代“找不到指定程序”. 解决: 转自:http://hi.baidu.com/violetwangy/item/c35b3b95ecf5374cf0421 ...