zoukankan      html  css  js  c++  java
  • Kadj Squares

    题目大意:给一些序列的正方形的边长,然后让这个正方形倾斜45度,放在第一象限,一个角要紧挨着x轴,按照输入的顺序放下去,然后问最后从上往下看可以看到那些正方形?
     
    分析:不能算是计算几何题......先求出来这个正方形的左右两端的位置,然后判断是否有比它高的正方形把它掩盖住就行了,为了避免浮点运算,可以用2*len当做对角线,也就是把所有边的长度扩大了sqrt(2)倍
     
    代码如下:
    ========================================================================================================================================
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    const int MAXN = 107;
    const double EPS = 1e-8;
    
    struct Line{int L, R, len;}a[MAXN];
    
    int main()
    {
        int N;
    
        while(scanf("%d", &N) != EOF && N)
        {
            memset(a, 0, sizeof(a));
    
            for(int i=0; i<N; i++)
            {
                scanf("%d", &a[i].len);
                for(int j=0; j<i; j++)
                    a[i].L = max(a[i].L, a[j].R-abs(a[j].len-a[i].len));
                a[i].R = a[i].L + a[i].len * 2;
            }
    
            for(int i=0; i<N; i++)
            {
                for(int j=0; j<i; j++)
                {
                    if(a[i].L < a[j].R && a[i].len < a[j].len)
                        a[i].L = a[j].R;
                }
                for(int j=i+1; j<N; j++)
                {
                    if(a[i].R > a[j].L && a[i].len < a[j].len)
                        a[i].R = a[j].L;
                }
            }
    
            for(int k=0, i=0; i<N; i++)
            {
                if(a[i].L < a[i].R)
                {
                    if(k++)printf(" ");
                    printf("%d", i+1);
                }
            }
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    http简记
    socket简介
    iOS代理
    ai作图小技能
    按钮切换
    关于ie8背景图片的平铺
    关于文本省略
    关于html table样式
    阿里巴巴iconfont使用方法(超级详细)
    办公电脑安装虚拟机基本就绪
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4794448.html
Copyright © 2011-2022 走看看