数学 HDOJ 5301 Buildings

题目传送门

 1 /*
 2    题意:n*m列的矩阵,删除一个格子x,y。用矩形来填充矩阵。且矩形至少有一边是在矩阵的边缘上。
 3    求满足条件的矩形填充方式中面积最大的矩形,要使得该最大矩形的面积最小。
 4    分析:任何矩形都可以分为宽度为1的小矩形,所以只考虑矩形的可以的最小长度即可。
 5    讨论方法:这里   (我不会。。。)
 6  */
 7 #include <cstdio>
 8 #include <algorithm>
 9 #include <cstring>
10 using namespace std;
11 typedef long long ll;
12
13 int main(void)  {       //HDOJ 5301 Buildings
14     ll n, m, x, y;
15     while (scanf ("%I64d%I64d%I64d%I64d", &n, &m, &x, &y) == 4) {
16         if (n > m)  {
17             swap (n, m);    swap (x, y);
18         }
19         if (x > n - x + 1)  {
20             x = n - x + 1;
21         }
22         if (y > m - y + 1)  {
23             y = m - y + 1;
24         }
25         ll hm = (m + 1) / 2, hn = (n + 1) / 2;
26         ll ans = min (hm, hn);
27         if (m == n) {
28             if (m % 2 == 1) {
29                 if (x == hn && y == hm) ans--;
30             }
31         }
32         else    {
33             ll t = min (y, n - x);
34             ans = max (ans, t);
35             ans = min (ans, hm);
36         }
37         printf ("%I64d\n", ans);
38     }
39
40     return 0;
41 }
时间: 2024-11-10 01:24:09

数学 HDOJ 5301 Buildings的相关文章

hdoj 5301 Buildings

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <algorithm> 5 using namespace std; 6 int n,m,x,y,s,l; 7 int main() 8 { 9 while(~scanf("%d%d%d%d&qu

HDU 5301 Buildings

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题面: Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1421    Accepted Submission(s): 400 Problem Description Your current task is

HDU 5301 Buildings(2015多校第二场)

Buildings Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 759    Accepted Submission(s): 210 Problem Description Your current task is to make a ground plan for a residential building located

hdu 5301 Buildings (2015多校第二场第2题) 简单模拟

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题意:给你一个n*m的矩形,可以分成n*m个1*1的小矩形,再给你一个坐标(x,y),表示黑格子在n*m矩形中的位置,黑格子占一个1*1的小矩形的空间,用各种矩形去填充n*m矩形,(x,y)位置不能填,且每个去填充的小矩形都有一边是靠着n*m矩形的外框,求这些填充的小矩形在最小大小情况下的面积最大的矩形面积. 思路:要是填充的矩形大小最小,那么靠近边框的长度一定为1,所以只要判断在矩形内部的长

bzoj4302 Hdu 5301 Buildings

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4302 [题解] 出自2015多校-学军 题意大概是给出一个n*m的格子有一个格子(x,y)是坏的,用一些矩形覆盖没有坏的格子,使得每个矩形都有一面靠着边界.求最大的矩形的面积最小. 稍微分析就会发现肯定是1*x的矩形最优,因为如果是2*x可以分成2个1*x. 那么我们先把矩形转转位置,使得n<=m,且(x,y)在左上角. 矩形内没有坏点,显然方案是(n+1)/2 我们画个图,黑色的那个是坏

二分查找+数学 HDOJ 4342 History repeat itself

题目传送门 题意:计算从1开始到第n个非完全平方数的开方和 分析:设第n个非完全平方数的值为a,x * x < a < (x+1) * (x+1),而且易得(tmp = sqrt (a) ) == x,a之前的非完全平方数的个数为a - tmp,所以可以二分查找a - tmp == n的a,然后模拟一下能计算出前a个数的开方和 收获:二分查找是个好方法 代码: /************************************************ * Author :Running

数学 2015百度之星初赛2 HDOJ 5255 魔法因子

题目传送门 1 /* 2 数学:不会写,学习一下这种解题方式:) 3 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) 4 (h*power+l+mid)*a = (l*power+h+mid)*b 5 可推得:mid = ((h*power+l) * a - (l*power+h) * b) / (a - b); 6 所以可以枚举h,l然后求mid,注意mid的最低位一定是0,因为留出最低位加l或者h 7

Hdoj 2200 Eddy&#39;s AC难题 【数学】

Eddy's AC难题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4198 Accepted Submission(s): 1967 Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题目的数

数学+dp HDOJ 5317 RGCDQ

题目传送门 1 /* 2 题意:给一个区间,问任意两个数的素数因子的GCD最大 3 数学+dp:预处理出f[i],发现f[i] <= 7,那么用dp[i][j] 记录前i个f[]个数为j的数有几个, 4 dp[r][j] - dp[l-1][j]表示区间内j的个数,情况不多,分类讨论一下 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <vecto