在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子
【题目描述】
在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。
【输入】
输入文件包含多组测试数据。
第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。
每组数据为三个用空格隔开的整数 N,M,K。
3 3 3 8 4 5 13 7 14 86
【输出】
对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y表示最多能找到的符合条件的长方形数量。所有数据按读入顺序从1开始编号。
Case #1: 5 Case #2: 18 Case #3: 1398
【题解】
首先先考虑对于一个布满点的矩形(x行,Y列),所有的矩形总数为 C(2,x)*C(2,y)。要使数量最多,则x和y要尽可能接近(有最大行和最大列的限制)。 题中所给的K可能不能刚好排成大矩形,可能有多余的几个点,这几个点的数量一定不会超过一行或一列的最大数量。 试想如果超过,则多出来完整的一行或一列可以和原来的大矩形构成更大的矩形,剩下的点就不能构成完整的一行或一列了。
多余多出来的点,以一排或一列的形式,靠在大矩形短的一边(要注意是否到达边界),设多余K个点,则多增加的矩形数为 C(2,K)*L (L为长边的点数)。
为了简单起见,可以规定行大于列(对调旋转下),枚举 X、Y的有效极大组合,找出最大的结果就行了。
AC代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 int n,m,k; 5 void swap(int &a,int &b) 6 { 7 int t=a; 8 a=b; 9 b=t; 10 } 11 long long getc(long long j) 12 { 13 return j*(j-1)/2; 14 } 15 int main() 16 { 17 int T; 18 scanf("%d",&T); 19 int cas=0; 20 while (T--) 21 { 22 scanf("%d%d%d",&n,&m,&k); 23 if (n<m) swap(n,m); 24 int t=sqrt(k); 25 int b=t>m?m:t; 26 int a=k/b>n?n:k/b; 27 long long max=0; 28 for (;b>=2 && a<=n;--b,a=k/b) 29 { 30 long long sum=getc(a)*getc(b); 31 int p=k-a*b; 32 if (a<n) 33 { 34 sum=sum+getc(p)*a; 35 } 36 else 37 { 38 sum=sum+getc(p)*b; 39 } 40 max=max>sum?max:sum; 41 } 42 printf("Case #%d: %I64d\n",++cas,max); 43 } 44 45 return 0; 46 }
在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子相关推荐
- Python -- Matplotlib:画一条水平线或竖直线
目录 竖直线 水平线 原文链接 https://blog.csdn.net/math_gao/article/details/109592302 竖直线 # 画出 x=2 这条垂直线 plt.axvl ...
- html竖直线代码,html添加一条直线 用html代码怎样画一条竖直线?
需要准备的材料分别有:电脑.chrome浏览器.html编辑器. 首先打开html编辑器,新建一个html文件,例如:index.html. 其次,在index.html的标签中,添加代码:. 浏览器 ...
- matlab 一条水平线,matlab画一条水平线
凸轮廓线的MATLAB画法_工学_高等教育_教育专区.基于matlab的凸轮画法实例 凸轮廓线的 MATLAB 画法 1 凸轮轮廓方程 X ? OE ? EF ? E * Cos( J ) ? ( . ...
- 解决css图片和文字不在一条水平线上
css解决文字和图片不在一条水平线上 通常情况下图片是默认顶部对齐,而文字则是默认底部对齐的,所以我们在布局时经常会遇到图片和文字不能对齐的问题. 解决方法很简单我们只需要给图片添加一条属性即可 im ...
- CMD 一条命令 执行 多条命令
CMD 一条命令 执行 多条命令 如果想一次运行多条命令可能用到的连接符个人了解到的有三个:&&,|| 和 &. aa && bb 含义:执行aa,成功后再执行 ...
- mysql 取出20条数据_“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法...
1.首先.select top使用方法: select * from table -- 取全部数据.返回无序集合 select top n * from table -- 依据表内数据存储顺序取前n ...
- 用一句SQL取出第 m 条到第 n 条记录的方法
1 --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) 2 3 SELECT TOP n-m+1 * 4 FROM Table 5 WHERE (id NOT IN (SE ...
- pgsql 前10条_白沙湾南片区11条新建道路最新进度及建成时间,已建成一条!还有一条将通车...
原标题:白沙湾南片区11条新建道路最新进度及建成时间,已建成一条!还有一条将通车 近日,@白沙河畔 从流亭街道办事处获悉:为了完善白沙湾南片区及仙家寨南片区路网及基础设施配套,为周边区域提供良好的生活 ...
- SQL取出第 m 条到第 n 条记录的方法
页或者分段调用数据的时候很有用的啊 --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) CODE: SELECT TOP n-m+1 * FROM Table WHERE ...
最新文章
- Tomcat 1099端口占用重启无效,查不到进程,改换端口无效解决方案
- eclipse 无法使用注解的两个解决方法
- Spring Boot集成CKEditor
- 【网络安全】一些webshell免杀的技巧
- win10弹不出密码输入框_电脑互访提示输入网络密码,怎么办?
- java 类的执行顺序_Java中类的执行顺序
- c语言 %-20s,一次 Rust 和C语言的混搭
- 全局模式下的正则表达式
- 360公司2019秋季校园招聘内部推荐启动啦!!!
- [设计模式-结构型]装饰模式(Decorator)
- python之列表生成式
- 开发环境eclipse for Mac 下的常用快捷键汇总(基本参照Win系,将Ctrl换为Command)
- Pytorch专题实战——激活函数(Activation Functions)
- android:Read-only file system解决
- getSelectionStart() doesn't work in android, is always 0
- 亦是美网络,致力于操作系统应用与计算机网络技术的IT网站。
- 用Python画哆啦A梦
- Python图片添加水印修改MD5值
- LCS(longest common sequence)算法的实现(十分详细)
- MAC 地址以及它的单播、多播、组播