hdu 3432——Wax

9 篇文章 0 订阅

题意:将一个矩形平分成n份,要求每条平分线的起点都要是门所在的点,答案逆时针方向输出

代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;

const double eps=1e-6;
int dcmp(double x)
{
    if(fabs(x)<eps)return 0;
    else return x<0?-1:1;
}



int main()
{
 //   freopen("data.txt","r",stdin);
    double width,height,door,workers;
    while(scanf("%lf%lf%lf%lf",&width,&height,&door,&workers))
    {

        if(width==0&&height==0&&door==0&&workers==0)break;
        double area=width*height;
        area/=workers;
        double d1=width-door;
        double prex=width;
        double prey=0;
        for(int i=0;i<workers-1;++i)
        {
            double tmp=area;
            double x,y;
            if(dcmp(prey-height)!=0)
            {
                if(dcmp(prex-width)==0)
                {
                    x=width;
                    y=2*tmp/d1+prey;
                    if(y>height)
                    {
                        tmp-=(height-prey)*d1/2;
                        y=height;
                        x=width-tmp*2/y;
                    }
                }
                else if(dcmp(prex)==0)
                {
                    x=0;
                    y=prey-2*tmp/door;
                }
            }
            else
            {
                y=height;
                x=prex-tmp*2/height;
                if(x<0)
                {
                    tmp=tmp-prex*prey/2;
                    x=0;
                    y=height-tmp*2/door;
                }
            }
            prex=x;
            prey=y;
            printf("%.3lf %.3lf ",x,y);
        }
        printf("\n");
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值