【问题描述】
随机一个1~n的排列,这个排列的分数是这样计算的。
对于排列中的数ai,如果对于任意一个j满足1<=j<i都有aj>ai则这个排列的分数加上ai,否则不变。
求这个排列的分数的数学期望。
【输入格式】
输入一行一个正整数n
【输出格式】
输出1行一个数,表示这个排列的分数的数学期望,为了避免实数误差带来的问题,你只需输出其整数部分即可。
【输入样例】
2
【输出样例】
2
【样例解释】
排列有两种,1 2和2 1
1 2这个排列中1满足题意,2不满足,故分数为1。
2 1这个排列中1 2 均满足题意,故分数为3。
数学期望为(1+3)/2=2,输出整数部分为2
【数据范围】
对于10%的数据,n<=9
对于30%的数据,n<=1000
对于50%的数据,n<=1000000
对于100%的数据,n<=10^1000
题解
其实,通过类似于加大于小于号的推理可发现输入什么输出什么就好。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
char a[10010];
int main()
{
freopen("expect.in","r",stdin);
freopen("expect.out","w",stdout);
scanf("%s",a);
int l=strlen(a);
for(int i=0;i<l;i++)
printf("%c",a[i]);
return 0;
}