值得思考的一道题 2013腾讯编程马拉松初赛 HDU 4503
来源:互联网 发布:js中定义数组 编辑:程序博客网 时间:2024/04/30 17:07
欢迎关注我的微博:点击打开链接
题意自不必多说,那我们来看看题中相同关系的定义:互相为朋友关系或者是彼此都没有朋友关系,也就是说三人之间有三条边或者是有零条边都是称为相同关系的。
已经给出了每个点的朋友的个数,也就是与该点相连的点的个数,我们设第i个点的朋友个数为p[i]。于是使用这样一种策略来选出三个点:首先我们选择i号节点,然后我们在p[i]个朋友中选一个;然后在剩余的人中选一个,也就是在n-1-p[i]的人中选一个人;这样子选的三个人有什么特点呢?
我们看到从朋友中选了一个,保证了相同关系中三人无边的情况不会出现;然而在非朋友中选了一个,保证了相同关系中三条边的情况不会出现。也就说上面选三个点的策略保证排除了所有的相同关系的情况,所以对所有i的p[i]*(n-1-p[i])求和就是相同关系补集的元素个数。
再者我们发现按上面的策略选的三个点,没种三点情况总会被重复选一次,于是需要把上面的结果除以2,显然这是没有问题的。
知道了这些,结果就很简单了,其实我认为代码可以不贴。
#include <iostream>#include <cstdio>using namespace std;int C(int n, int m){ if(m > n) return 0; else if(m == n) return 1; else { int ans = 1; for(int i=n-m+1; i<=n; i++) ans *= i; for(int i=1; i<=m; i++) ans /= i; return ans; }}int main(){ int T, n; int a, b; scanf("%d", &T); while(T--) { scanf("%d", &n); a = b = 0; int temp; double ans = 0; for(int i=0; i<n; i++) { scanf("%d", &temp); ans += (double)temp*(n-1-temp); } ans /= 2.0; ans = ans/(double)(C(n, 3)); printf("%.3lf\n", 1-ans); } return 0;}
- 值得思考的一道题 2013腾讯编程马拉松初赛 HDU 4503
- 2013腾讯编程马拉松初赛
- 2013腾讯编程马拉松初赛第0场(3月20日)HDU 4503
- 腾讯编程马拉松初赛的整理
- 2013腾讯编程马拉松初赛第〇场(HDU 4503) 湫湫系列故事——植树节
- 2013腾讯编程马拉松初赛第〇场(3月20日)(HDU 4500 4501 4502 4503 4504)
- HDU 4525 威威猫系列故事——吃鸡腿 2013腾讯编程马拉松初赛第五场第一题
- HDU 4527 小明系列故事——玩转十滴水 2013腾讯编程马拉松初赛第五场第二题
- HDU 4500 小Q系列故事——屌丝的逆袭 2013腾讯编程马拉松初赛第〇场第一题
- HDU 4505 小Q系列故事——电梯里的爱情 2013腾讯编程马拉松初赛第一场第一题
- 2013腾讯编程马拉松初赛第0场(3月20日) HDU 4500
- 2013腾讯编程马拉松初赛第0场(3月20日)HDU 4501
- 2013腾讯编程马拉松初赛第0场(3月20日)HDU 4502
- 2013腾讯编程马拉松初赛第〇场
- 2013腾讯马拉松编程初赛3月20日1001
- 2013腾讯马拉松编程初赛3月21日1001
- 2013腾讯马拉松编程初赛3月21日1002
- 2013腾讯马拉松编程初赛3月22日1001
- iOS 图片压缩UIImage方法扩展
- U盘量产初期常识
- 迷宫
- GTK下图标与汉字的显示
- 匿名内部类
- 值得思考的一道题 2013腾讯编程马拉松初赛 HDU 4503
- addContentView的使用
- echache
- Spring AOP 初探
- awk的读取处理结构数据的案例
- nginx配置
- VS.NET2010水晶报表安装部署[VS2010]
- Iphone开发之音频101 (第一部分): 文件和数据类型
- rt3070 移植到at91 linux记录