HDU 5753 Permutation Bo (推导 or 打表找规律)
Permutation Bo
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5753
Description
There are two sequences h1∼hn and c1∼cn. h1∼hn is a permutation of 1∼n. particularly, h0=hn+1=0.
We define the expression [condition] is 1 when condition is True,is 0 when condition is False.
Define the function f(h)=∑ni=1ci[hi>hi−1 and hi>hi+1]
Bo have gotten the value of c1∼cn, and he wants to know the expected value of f(h).
Input
This problem has multi test cases(no more than 12).
For each test case, the first line contains a non-negative integer n(1≤n≤1000), second line contains n non-negative integer ci(0≤ci≤1000).
Output
For each test cases print a decimal - the expectation of f(h).
If the absolute error between your answer and the standard answer is no more than 10−4, your solution will be accepted.
Sample Input
4
3 2 4 5
5
3 5 99 32 12
Sample Output
6.000000
52.833333
Source
2016 Multi-University Training Contest 3
##题意:
对于n的任意一个全排列,如果出现了hi>hi−1 && hi>hi+1 的情况,则对ci计数一次.
求所有全排列计数后,总和的期望.
##题解:
先看一下官方题解:
根据期望的线性性,我们可以分开考虑每个位置对答案的贡献。
可以发现当i不在两边的时候和两端有六种大小关系,其中有两种是对答案有贡献的。
(比如n=3,考虑(123)(132)(213)(231)(312)(321)),仅有(132)(231)会对C2计数.)
那么对答案的贡献就是 Ci/2
在两端的话有两种大小关系,其中有一种对答案有贡献。
那么对答案的贡献就是 Ci/3
复杂度是O(n)。
推不出上述规律的话还可以打表找规律:统计每个Ci出现的次数.
很容易发现C1和Cn出现的次数为n!/2; 其他Ci出现的次数是n!/3;
注意特判n=1的情况.
##代码:
(注释部分为打表代码)
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 41000
#define mod 100000007
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;
int main(int argc, char const *argv[])
{
//IN;
// int n = 9;
// //int num[] = {0,1,2,3,4,0};
// //int ci[] = {0,3,2,4,5,0};
// int num[] = {0,1,2,3,4,5,6,7,8,9,0};
// int ci[] = {0,3,5,99,32,12,12,12,12,12,0};
// int cnt[10] = {0};
//
// int ans = 0;
// do{
// int cur = 0;
// for(int i=1; i<=n; i++) {
// printf("%d ", num[i]);
// if(num[i]>num[i-1] && num[i]>num[i+1]){
// cur += ci[i];
// cnt[i]++;
// }
// }
// printf(" :%d\n", cur);
// ans += cur;
// }while(next_permutation(num+1,num+n+1));
//
// printf("%d ", ans);
// double Ans = (double) ans;
// for(int i=1; i<=n; i++) {
// Ans /= (double)i;
// }
// printf("%lf\n", Ans);
//
// for(int i=1; i<=n; i++)
// printf("%d ", cnt[i]);
int n;
while(scanf("%d", &n) != EOF)
{
double ans = 0;
if(n == 1) {
scanf("%lf", &ans);
printf("%lf\n", ans);
continue;
}
for(int i=1; i<=n; i++) {
double x; scanf("%lf", &x);
if(i==1 || i==n) {
ans += x / 2.0;
} else {
ans += x / 3.0;
}
}
printf("%lf\n", ans);
}
return 0;
}
HDU 5753 Permutation Bo (推导 or 打表找规律)的更多相关文章
- hdu 5753 Permutation Bo 水题
Permutation Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...
- hdu 5753 Permutation Bo
这里是一个比较简单的问题:考虑每个数对和的贡献.先考虑数列两端的值,两端的摆放的值总计有2种,比如左端:0,大,小:0,小,大:有1/2的贡献度.右端同理. 中间的书总计有6种可能.小,中,大.其中有 ...
- hdu 5391 Zball in Tina Town(打表找规律)
问题描述 Tina Town 是一个善良友好的地方,这里的每一个人都互相关心. Tina有一个球,它的名字叫zball.zball很神奇,它会每天变大.在第一天的时候,它会变大11倍.在第二天的时候, ...
- 【数学】HDU 5753 Permutation Bo
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 题目大意: 两个序列h和c,h为1~n的乱序.h[0]=h[n+1]=0,[A]表示A为真则为 ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- HDU 5795 A Simple Nim (博弈 打表找规律)
A Simple Nim 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5795 Description Two players take turns ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- [国家集训队]整数的lqp拆分 数学推导 打表找规律
题解: 考场上靠打表找规律切的题,不过严谨的数学推导才是本题精妙所在:求:$\sum\prod_{i=1}^{m}F_{a{i}}$ 设 $f(i)$ 为 $N=i$ 时的答案,$F_{i}$ 为斐波 ...
- HDU 4731 Minimum palindrome 打表找规律
http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...
随机推荐
- java导出excel报表
1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...
- Oracle SQL大全
一. 基本操作表和数据 -- 建表 CREATE TABLE ab_student ( id number(4) ) create table ab_class( id number(4), name ...
- Android消息推送完美解决方案全析
推送功能在手机应用开发中越来越重要,已经成为手机开发的必须.在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折.本文就是用来和大家共同探讨一种Android消息推 ...
- 结构体mem_pool_t
/** Memory area header */ typedef struct mem_area_struct mem_area_t; /** Memory pool */ typedef stru ...
- 函数flst_remove
移除 node, node->prev直接指向node->next /*********************************************************** ...
- #include<unistd.h>头文件的理解
1.百度百科定义 unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称.该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故 ...
- 关于python中使用mongodb模块,save和insert的小问题
今天写python脚本的时候发现这样一个问题: import os , string , datetime ,pymongo; conn = pymongo.Connection("127. ...
- 【转】IOS 计时器 NSTimer
原文网址:http://blog.csdn.net/tangshoulin/article/details/7644124 1.初始化 + (NSTimer *)timerWithTimeInterv ...
- HDU 5875 Function
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 完美完全卸载Oracle 11g数据库
Oracle 11g可在开始菜单中卸载,然后同时需要删除注册表中相关内容. 操作系统:windows10专业版. 卸载步骤: 1.停用oracle服务:进入计算机管理,在服务中,找到oracle开头的 ...