编程之美2013 资格赛第二题 长方形

长方形

时间限制: 1000ms 内存限制: 256MB

描写叙述

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

输入

输入文件包括多组測试数据。

第一行,给出一个整数T,为数据组数。接下来依次给出每组測试数据。

每组数据为三个用空格隔开的整数 N,M,K。

输出

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

数据范围

1 ≤ T ≤ 100

0 ≤ K ≤ N * M

小数据:0 < N, M ≤ 30

大数据:0 < N, M ≤ 30000

例子输入
3
3 3 8
4 5 13
7 14 86
例子输出
Case #1: 5
Case #2: 18
Case #3: 1398
#include<cstdio>
#include<cmath>
#define ll long long
int n,m,k;
int min(int a,int b){return a<b?a:b;}
ll cal(int x){return (x-1)*x/2;}
ll C(int a,int b){return cal(a)*cal(b)+(b<m?b:a)*cal(k-a*b);}
int main(){
    int T,b,q,r,ca=1,i;
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d",&n,&m,&k);
		printf("Case #%d: ",ca++);
		if(n>m){ll t=n;n=m;m=t;}
		q=sqrt(1.0*k);r=min(n,q);
		ll ans=0;
		for(i=2;i<=r;i++){
			b=min(m,k/i);
			if(k>=b*(i+1))continue;
			ll tmp=C(i,b);
			if(ans<tmp)ans=tmp;
		}
		printf("%lld\n",ans);
	}
	return 0;
}

时间: 2024-08-06 12:28:03

编程之美2013 资格赛第二题 长方形的相关文章

编程之美2015资格赛A题

题目1 : 2月29日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之 后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Fe

编程之美2015初赛第二场 c题 八卦的小冰

题意:根据给出的各个用户之间的亲密度,计算所有异性对的亲密度总和. 思路:大数据怕太大,所以用邻接表保存这个无向图,在输入时顺便统计亲密度总和.对于更改性别:统计一下该用户的异性朋友的亲密度总和,再总计一下该用户同性朋友的亲密度总和,两者作差,再更新一下总亲密度.对于更改亲密度:要考虑改为0的情况,就是两用户没有关系了,图中删除这条边,根据亲密度的增加或减少,总亲密度也要相应增加或减少.要查询时直接输出.这样应该能应对全是3的情况.个人想法! 1 #include <iostream> 2 #

2月29日(编程之美2015资格赛)

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

编程之美2015资格赛

题目1 : 2月29日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之 后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Fe

编程之美2013 初赛一 A - 竞价 学习大牛的思路

这题我做了N久也做不出....赛后看了大牛AC的思路.... Program: #include<iostream> #include<cmath> #include<stack> #include<queue> #include<set> #include<algorithm> #include<stdio.h> #include<string.h> #define ll long long #define

微软2编程之美2015资格赛

题目1 :2月19日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Febr

编程之美2015资格赛:回文字符序列

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

hiho 编程之美2015资格赛(2月29日-模拟日期)

题目1 : 2月29日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Feb

编程之美2015资格赛 题目1 : 2月29日

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",