zoukankan      html  css  js  c++  java
  • [poj3347]Kadj Squares

    题目大意:斜45度摆放的正方形,靠左摆放,但需与x轴接触,求按顺序摆放,从上方可以观察到的正方形序号。

    解题关键:因为题目没让输出与边长有关的东西,所以可以直接将边长设为左端点到中心的距离,来消除误差。求出每个正方形的左端点和右端点之后,然后dp一下求出每个正方形最左端可以被看到的位置和最右端可以被看到的位置。判断一下即可出答案。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    using namespace std;  
    typedef long long ll;
    struct Segment{
        int left,right,len;  
    }seg[50];
    //此题只看的顺序,所以把边长看成左端点到中心的距离,避免精度问题 
    int main(){  
        int n;  
        while(cin>>n,n){
            for(int i=0;i<n;i++){  
                cin>>seg[i].len;
                seg[i].left=0;  
                for(int j=0;j<i;j++){
                    seg[i].left=max(seg[i].left,seg[j].right-abs(seg[i].len-seg[j].len));
                }
                seg[i].right=seg[i].left+seg[i].len*2;
            }
            //求线段交 
            for(int i=1;i<n;i++){  
                for(int j=0;j<i;j++){
                    if(seg[i].len>seg[j].len&&seg[i].left<seg[j].right)  
                        seg[j].right=seg[i].left;  
                    else if(seg[i].len<seg[j].len&&seg[i].left<seg[j].right)  
                        seg[i].left=seg[j].right; 
                }  
            }  
            for(int i=0;i<n;i++){
                if(seg[i].left<seg[i].right)  
                    cout<<i+1<< " ";
            }
            cout<<"
    ";
        }
        return 0;  
    }
  • 相关阅读:
    微服务架构的设计原则
    分布式锁
    银行卡Bin和Logo
    Docker部署Jenkins
    云服务器配置 docker java mysql mongodb redis nginx jenkins 环境
    Mybatis使用心德
    CTO 技能图谱
    React 面试问题
    Dart语法学习
    第一篇博客
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/8734590.html
Copyright © 2011-2022 走看看