zoukankan      html  css  js  c++  java
  • hdu 4503(湫湫系列故事——植树节)

    题解:

           这题不太好想,参考了下别人的思想,加自己的详细补充:
          1. 从反面想,若能求出3个人之间有一条关系或者两条关系的总数,问题便可解(余下就是三人两两相互关系和两两无关系)。
          2.对于点i,剩下的n-1个点可分为两个集合,一个是和i有关系的a[i],一个是没有关系的(n-1-a[i]),
          从这俩集合里分别取一个点,组成三个点,便符合了三个人之间有一条关系或者两条关系的条件。res=Σ(a[i] * (n-1-a[i])),
          3.在求和后的res中,
             你会发现三人有一条关系的情况下,有关系的两人被算了两次。
                              有两条关系的情况下,无关系的两人被算了两次。
            (自己作个简单图帮助理解)因为刚好的数了两次,所以结果要除2
    #include<stdio.h>
    int main()
    {
        int T;
        int n;
        int a;
        double res;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            res=0.0;
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a);
                res+=(n-a-1)*a;
            }
            printf("%.3lf\n",1.0-res*3/n/(n-1)/(n-2));//运算后的式子
        }
        return 0;
    }

    ---恢复内容结束---

  • 相关阅读:
    如何将JS中object转换为字符串
    验证码的实现
    JSP中解决session超时跳转到登陆页面并跳出iframe框架或局部区域的方法
    java 后台封装json数据学习总结
    ztree复选框
    左偏树详解
    Docker 入门
    linux 多进程
    派生类构造函数顺序
    20210203 7. 分库分表实战及中间件
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3017835.html
Copyright © 2011-2022 走看看