一、题意

No response.T_T

二、思路

分$n$为奇数或者偶数讨论。

如果$n$是奇数,列出不等式组:$r_1+r_2=d_{1},r_2+r_3=d_{2},r_3+r_4=d_{3},\cdots,r_{n-1}+r_n=d_{n-1},r_n+r_1=d_n$,可以解出,$r_1=\frac{d_{1}+d_{3}+d_{5}+\cdots-d_{2}-d_{4}-\cdots}{2}$,然后再用上述式子依次算出$r_2$至$r_n$。最后判断$r_1$至$r_n$中是否存在负数即可。

如果$n$是偶数。如果奇数起点的边之和$s_1=d_1+d_3+d_5+\cdots+d_{n-1}$不等于$s_2=d_2+d_4+d_6+\cdots+d_n$,说明无解,否则,一定可以三分枚举出$r_1$,然后推出其他半径。要注意的是,三分的下界和上界需要处理出来。否则,面积关于$r_1$的二次函数在$[low,high]$区间内不一定只有一个极小值。最后判断是否所有半径都大于$0$。

三、代码

#include<bits/stdc++.h>
using namespace std;
);
struct point {
    double x, y;
} p[];
], ansr[];
int n;

inline bool eq(double x, double y) {
    );
}

inline double dis(point a, point b) {
    return hypot(a.x - b.x, a.y - b.y);
}

double calc(double r1) {
    ansr[] = r1;
    double sum = PI * r1 * r1, nr;
    ; i <= n; ++i) {
        ansr[i] = d[i - ] - ansr[i - ];
        sum += PI * ansr[i] * ansr[i];
    }
    return sum;
}

int main() {
//    freopen("e.in", "r", stdin);
    int T;
    for(scanf("%d", &T); T--;) {
        ;
        scanf("%d", &n);
        ; i <= n; ++i)scanf("%lf %lf", &p[i].x, &p[i].y);
        ; i <= n; ++i)d[i] = dis(p[i], i < n ? p[i + ] : p[]);
        ) {
            ;
            ; i <= n; i++) {
                )fz += d[i];
                else fz -= d[i];
            }
            ansr[] = fz / ;
            ; i <= n; ++i)ansr[i] = d[i - ] - ansr[i - ];
            ] + ansr[n], d[n]))imp = ;
        }
        else {
            , t2 = ;
            ; i <= n; ++i) {
                )t1 += d[i];
                else t2 += d[i];
            }
            ;
            else {
                , high = min(d[], d[n]), lmid, rmid, s1, s2, sum = ;
                ; i <= n; ++i) {
                    )sum += d[i], high = min(high, sum);
                    else sum -= d[i], low = max(low, sum);
                }
                ;
                while(ttt--) {
                    lmid = (low + high) / ;
                    rmid = (lmid + high) / ;
                    s1 = calc(lmid), s2 = calc(rmid);
                    if(s1 < s2)high = rmid;
                    else low = lmid;
                }
                double r1;
                if(calc(low) < calc(high))r1 = low;
                else r1 = high;
                calc(r1);
            }
        }
        ; i <= n; ++i) {
            )imp = ;
        }
        if(imp) puts("IMPOSSIBLE");
        else {
            ;
            ; i <= n; ++i)ans += ansr[i] * ansr[i];
            ans *= PI;
            printf("%.2f\n", ans);
            ; i <= n; ++i)printf("%.2f\n", ansr[i]);
        }
    }
    ;
}

2015ACM-ICPC长春E题(hdu5531)题解的更多相关文章

  1. 2015ACM/ICPC亚洲区沈阳站 部分题解

    链接在这:http://bak.vjudge.net/contest/132442#overview. A题,给出a,b和n,初始的集合中有a和b,每次都可以从集合中选择不同的两个,相加或者相减,得到 ...

  2. 2015ACM/ICPC亚洲区长春站 L hdu 5538 House Building

    House Building Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  3. 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b

    Count a * b Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  4. (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...

  5. 2015ACM/ICPC亚洲区长春站 J hdu 5536 Chip Factory

    Chip Factory Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  6. 2015ACM/ICPC亚洲区长春站 H hdu 5534 Partial Tree

    Partial Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)To ...

  7. 2015ACM/ICPC亚洲区长春站 G hdu 5533 Dancing Stars on Me

    Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  8. 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array

    Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  9. 2015ACM/ICPC亚洲区长春站 E hdu 5531 Rebuild

    Rebuild Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total S ...

随机推荐

  1. BigPipe 大的页面分割成一个一个管道

    bigpipe创新驱动力  node实现 具体实现 过去十年,现代web站点变得更加动态和内容化,交互性也逐步增强, 传统的页面处理的方式却没有保持一样的速度发展,越来越不能满足用户对极致性能的追求. ...

  2. Cisco ASA(8.4)端口映射设定(ASDM)

    1.进入到Configuration→firewall→NAT Rules画面. 2.点“services”添加服务端口,此案例添加TCP 1443和UDP 1443端口映射 3.添加“Network ...

  3. 无法访问 MemoryStream 的内部缓冲区

    无法访问 MemoryStream 的内部缓冲区 在处理剪贴板数据时, ms.GetBuffer() 语句出现异常,代码如下: //检索当前位于系统剪贴板中的数据 IDataObject ido = ...

  4. fluent nhibernate映射的数值类型问题

    fluent nhibernate中,数值类型设置不当,就可能会引发一些意想不到错误. 一.引发映射错误 比如,oracle数据库中,字段ID类型是number,结果用codesmith生成代码,实体 ...

  5. HRBUST单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...

  6. Linux下C++的通用Makefile与解析

    本文给出万能Makefile的具体实现,以及对其中的关键点进行解析.所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改. 号称万能Makefile,一统江湖.我对原版的M ...

  7. 软考------(抽象类、接口) 策略设计模式(strategy) 应用

    某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征.需要模拟的飞机种类及其特征如表5-1所示. #include <iostream> #include ...

  8. 【OpenCV】Learn OpenCV

    learn opencv website: https://www.learnopencv.com/ learn opencv github:https://github.com/spmallick/ ...

  9. 【转】Python判断字符串是否为字母或者数字

    str_1 = " str_2 = "Abc" str_3 = "123Abc" #用isdigit函数判断是否数字 print(str_1.isdi ...

  10. 利用GPU改善程序性能的一点心得

    1.     硬件方面 a. 流处理器个数    Gpu内部的计算单元个数,决定分析模块实时性的关键因素.    实测效果: gtx760  1152个 Gtx960  1024个 单路1080p运动 ...