zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛 L3-012. 水果忍者

     1 /*对于一条满足条件的直线,向下移,直到触碰一条线段的下端点,仍然经过其它线段,该直线仍然满足条件
     2 即以一条线段的下(上)端点作为直线上的一点,求为了经过一条线段的最小、最大斜率值(mink,maxk),直线斜率要求满足 
     3 max(mink1,mink2,…,minkn) <= min(maxk1,maxk2,…,maxkn)
     4 */ 
     5  
     6 #include <cstdio>
     7 #include <cstdlib>
     8 #include <cmath>
     9 #include <cstring>
    10 #include <stdbool.h>
    11 #include <set>
    12 #include <vector>
    13 #include <map>
    14 #include <queue>
    15 #include <algorithm>
    16 #include <iostream>
    17 using namespace std;
    18 #define maxn 10005
    19 #define inf 1e10 
    20 
    21 double x[maxn],yl[maxn],yh[maxn];
    22 
    23 int main()
    24 {
    25     long n,i,k,c;
    26     double a,b,p,q,t,xx,yy;
    27     scanf("%ld",&n);
    28     for (i=1;i<=n;i++)
    29         scanf("%lf%lf%lf",&x[i],&yh[i],&yl[i]);
    30     for (k=1;k<=n;k++)
    31     {
    32         p=inf;
    33         q=-inf;
    34         for (i=1;i<=n;i++)
    35             if (i!=k)
    36             {
    37                 a=(yh[i]-yl[k])/(x[i]-x[k]);
    38                 b=(yl[i]-yl[k])/(x[i]-x[k]);
    39                 if (a<b)
    40                 {
    41                     t=a;
    42                     a=b;
    43                     b=t;
    44                     c=0;
    45                 }
    46                 else
    47                     c=1;
    48                 if (p<b || q>a)
    49                     break;
    50 //                p=min(p,a);
    51                 if (a<p)
    52                 {
    53                     p=a;
    54                     if (c==1)
    55                     {
    56                         yy=yh[i];
    57                         xx=x[i];                        
    58                     }
    59                     else
    60                     {
    61                         yy=yl[i];
    62                         xx=x[i];
    63                     }
    64                 }
    65                 q=max(q,b);
    66             }
    67         if (i==n+1)
    68         {
    69             printf("%.0lf %.0lf %.0lf %.0lf",x[k],yl[k],xx,yy);
    70             return 0;
    71         }
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    2020年9月29日
    随机生成验证码
    动手动脑java语法基础
    Java语法之动手实验
    代码大全2 读书笔记
    java动手动动脑之字串联接
    二柱子问题
    生成随机四则运算1
    可变参数
    2020年9月30日
  • 原文地址:https://www.cnblogs.com/cmyg/p/8719764.html
Copyright © 2011-2022 走看看