poj 1319

题目:http://poj.org/problem?id=1319

题意:给出一个容器的尺寸  a * b,在这个容器里装直径是单位长度的管子,有两种装的办法,一种是题目里面给的图 a,图 b,另一种是图 c,图 d,问最多可以装多少个管子,

前两个图那样的很好计算,管子的数目就是 floor(a) * floor(b) (floor(x)是指不大于 x 的最大正整数,如 floor(2.8) = 2),如果是后面两组(交错装)那么就要考虑,是 a 为行数,还是 b 为行数两种情况了,后面两种方法画图可以知道,除了第一行管子的高度是 1,其他行的高度为 2 * ( sqrt(3) / 4), 如果宽度多出 一个半径的时候,那么就按 图 d 那样放,每行管子数都是一样多的,如果不是,那么按图 c 那样两行交替的放,

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <string>
 5 #include <algorithm>
 6 #include <set>
 7 #include <vector>
 8 #include <map>
 9 #include <math.h>
10 #define _clr(a,val) (memset(a,val,sizeof(a)))
11 #define Max(x,y) (x) < (y) ? (y):(x)
12 #define Min(x,y) (x) < (y) ? (x):(y)
13 #define Mid(x,y) (((x) + (y)) >> 1)
14 
15 using namespace std;
16 const int inf = 100000007;
17 const double pi = sqrt(3.0) / 2.0;
18 const double eps = 1e-8;
19 
20 int main()
21 {
22     double a,b;
23     //int sum;
24     //freopen("data.txt","r",stdin);
25     while(scanf("%lf%lf",&a,&b) != EOF)
26     {
27         int sum1 = floor(a) * floor(b);
28         int sum2 = -1,sum3 = -1;
29         int temp = floor(b); 
30         int ttemp = floor((a - 1) / pi) + 1; // 计算层数
31         int kemp = floor(a);
32         int kkemp = floor((b - 1) / pi) + 1; 
33         if((int)(b * 10) % 10 >= 5)  // 如果多出 一个半径,那么就是按 图 d的方法放
34         {
35             sum2 = temp * ttemp;
36         }
37         else // 否则按图 c 的方法放
38         {
39             if(ttemp % 2) sum2 = (temp * 2 - 1) * (ttemp / 2) + temp;
40             else sum2 = (temp * 2 - 1) * (ttemp / 2);
41         }
42         if((int)(a * 10) % 10 > 5)  // b 是行数
43         {
44             sum3 = kemp * kkemp;
45         }
46         else
47         {
48             if(kkemp % 2) sum3 = (kemp * 2 - 1) * (kkemp / 2) + kemp;  
49             else sum3 = (kemp * 2 - 1) * (kkemp / 2);
50         }
51         int sum = sum1;
52         if(sum < sum2) sum = sum2;
53         if(sum < sum3) sum = sum3;
54         if(a - 1.0 < eps || b - 1.0 < eps)
55         sum = 0;
56         if(sum == sum1) printf("%d grid\n",sum);
57         else
58         printf("%d skew\n",sum);
59     }
60     return 0;
61 }

转载于:https://www.cnblogs.com/fxh19911107/archive/2012/08/19/2646514.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值