zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 35
    边工作边刷题:70天一遍leetcode: day 36
    边工作边刷题:70天一遍leetcode: day 37-2
    边工作边刷题:70天一遍leetcode: day 37
    边工作边刷题:70天一遍leetcode: day 37-1
    边工作边刷题:70天一遍leetcode: day 38-2
    边工作边刷题:70天一遍leetcode: day 38-1
    边工作边刷题:70天一遍leetcode: day 38
    边工作边刷题:70天一遍leetcode: day 38-2
    边工作边刷题:70天一遍leetcode: day 38-1
  • 原文地址:https://www.cnblogs.com/fxh19911107/p/2646514.html
Copyright © 2011-2022 走看看