zoukankan      html  css  js  c++  java
  • poj 3347 Kadj Squares 扩大数据化整数

    http://poj.org/problem?id=3347

    边长不等的正方形,互不相交的摆放在x轴上,且边长与x轴y轴成45度角。(具体可以看题目图例)

    要注意正方形的顶点不能越过y轴。

    很麻烦的一道几何道,必须要对边长扩大sqrt(2)倍化整数,来避免精度问题。

    求每个正方形在x轴上的区间:若正方形i与正方形i-1相邻,则可直接计算出正方形i的顶点位置x。不相邻的话就要依次让正方形i与0~i-1的正方形相邻求出相应的顶点位置x,取最大值。

    #include<stdio.h>
    #include<stdlib.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    struct it
    {
     int a,b,len;
     int num;
    }q[55];
    bool cmp(it a,it b)
    {
     return a.a<b.a;
    }
    int main()
    {
     int n,i,j,k,x[55],ans[55],max,flag;
     while(scanf("%d",&n),n)
     {
      for(i=0;i<n;i++)
         {
       scanf("%d",&q[i].len);
       if(i==0)
        x[i]=q[i].len;
       else if(q[i].len<=q[i-1].len)
        x[i]=x[i-1]+2*q[i].len;
       else if(q[i].len<=2*q[i-1].len)
        x[i]=x[i-1]+2*q[i-1].len;
       else
       {
        x[i]=-1;
        for(j=0;j<i;j++)
        {
         if(q[i].len<=q[j].len)
             max=x[j]+2*q[i].len;
         else
          max=x[j]+2*q[j].len;
         if(x[i]<max)
          x[i]=max;
        }
       }
       q[i].a=x[i]-q[i].len;
       q[i].b=x[i]+q[i].len;
       if(q[i].a<0)
       {
        q[i].a=0;
        q[i].b=2*q[i].len;
        x[i]=q[i].len;
       }
       q[i].num=i+1;
         }
         sort(q,q+n,cmp);
         k=0;
         for(i=0;i<n;i++)
         {
        max=q[i].a;flag=0;
           for(j=0;j<i;j++)
           {
        if(q[j].b>=q[i].b)
        {
         flag=1;
         break;
        }
        if(q[j].len>q[i].len&&q[j].b>=max)
        max=q[j].b;
       }
        if(!flag)
        for(j=i+1;j<n;j++)
        {
         if(q[j].a<=max&&q[j].len>q[i].len)
         {
          flag=1;
          break;
         }
       }
       if(!flag)
        ans[k++]=q[i].num;
      }
      sort(ans,ans+k);
      printf("%d",ans[0]);
      for(i=1;i<k;i++)
      printf(" %d",ans[i]);
      printf("\n");
     }
     return 0;
    }

  • 相关阅读:
    怎样理解 DOCTYPE 声明
    怎样理解 Vue 组件中 data 必须为函数 ?
    怎样在 Vue 里面使用自定义事件将子组件的数据传回给父组件?
    怎样在 Vue 的 component 组件中使用 props ?
    怎样创建并使用 vue 组件 (component) ?
    怎样在 Vue 中使用 v-model 处理表单?
    怎样理解 MVVM ( Model-View-ViewModel ) ?
    怎样在 Vue 中使用 事件修饰符 ?
    怎样在 Vue 里面绑定样式属性 ?
    怎样使用 Vue 的监听属性 watch ?
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740221.html
Copyright © 2011-2022 走看看