一、题意

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. Bugzilla使用规范

    登陆Bugzilla Bugzilla登陆地址: http://172.21.8.39:21500/manual/ 账号:XXX@sim.com 密码:123456 Bugzilla简介 Bugzil ...

  2. SWIFT中数字格式

    SWIFT中格式化数字比较常用的应该就是以下几种格式了. var formatter = NSNumberFormatter() //formatter.numberStyle = NSNumberF ...

  3. SW4STM32 全局宏定义

    /************************************************************************************ * SW4STM32 全局宏 ...

  4. BZOJ3551: [ONTAK2010]Peaks加强版【Kruskal重构树】【主席树】

    重要的事情说三遍 不保证图联通 不保证图联通 不保证图联通 那些和我一样认为重构树是点数的童鞋是要GG Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个 ...

  5. java语法基础练习

    1.阅读示例: EnumTest.java,并运行.分析结果 代码: public class EnumTest { public static void main(String[] args) { ...

  6. dice 概率论 概率DP

    题目链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=459 找出公式,公式有实际意义,某种情形当 ...

  7. hdu 5182 结构体排序

    BC # 32 : 打 BC 的时候没看全三个关键字,WA 了五发,花了近一小时,问了一下才发现少看一个条件,于是顺利给跪. 题意:给出若干城市的两次空气质量,首先按空气质量差排序,若相等则按第二次排 ...

  8. jquery中.prev()

    ☆ 遍历 - .prev()方法:取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合.选择性筛选的选择器. (previous:上一个,上一页,前一个,以前的......) 示例: ...

  9. arduino 配置 esp8266

    在连接之前,先把程序下载到arduino中,很简单,就是定义了软口.如果中间要改动程序,要把rx和tx的连线去掉,不然下载程序可能失败. ; ; void setup() { pinMode(rx,I ...

  10. MSDN Windows XP Professional x64 Edition with SP2 +VL简体中文语言包+序列号

    [资源名称]---Windows XP Professional x64 Edition with SP2 - VL (English)[资源类型]---ISO镜像[资源语言]---英语+简体中文[杀 ...