CodeForces 340 C.Tourist Problem(组合数学)
2018-01-06 18:33
399 查看
Description
给出数轴上n个地点的坐标a1,...,an,随机的给出一个排列,按照该排列去一个个到达排列对应的地点,初始在原点处,问所走距离的期望值
Input
第一行一整数n,之后输入n个整数ai(2≤n≤105,1≤ai≤107)
Output
输出距离期望值的最简分数表示
Sample Input
3
2 3 5
Sample Output
22 3
Solution
对于一个排列p1,...,pn,其对应的距离为ap1+∑i=1n−1|api−api+1|
考虑ai对答案的影响(假设a序列已经升序)
如果p1=i,考虑p2的取值,其他n−2个数字随便排,如果p2>p1,那么一加一减,ai对答案贡献是0,如果p2<p1,那么两次都是加,对答案贡献是2ai,故这种情况对答案的贡献就是2⋅(i−1)⋅(n−2)!⋅ai
如果pn=i,考虑pn−1的取值,其他n−2个数字随便排,如果pn−1>pn,那么对答案贡献是−ai,如果pn−1<pn,那么对答案贡献是ai,故这种情况对答案的贡献就是((i−1)−(n−i))⋅(n−2)!⋅ai
如果pj=i,2≤j≤n−1,考虑pj−1和pj+1的取值,其他n−3个数字随便排,如果两者比pj一大一小,则对答案贡献是0,如果都比pj大,那么对答案贡献就是−2⋅ai,如果都比pj小,那么对答案贡献就是2⋅ai,故这种情况对答案的贡献就是(n−2)⋅(n−3)!⋅2⋅(A2i−1−A2n−i)⋅ai
故ai对总距离和贡献的次数为(n−2)!⋅(2⋅(i−1)+2⋅i−n−1+2⋅(A2i−1−A2n−i))=(n−1)!⋅(4⋅i−2⋅n−1)
进而求得期望为∑i=1n(4i−2n−1)⋅ain
Code
给出数轴上n个地点的坐标a1,...,an,随机的给出一个排列,按照该排列去一个个到达排列对应的地点,初始在原点处,问所走距离的期望值
Input
第一行一整数n,之后输入n个整数ai(2≤n≤105,1≤ai≤107)
Output
输出距离期望值的最简分数表示
Sample Input
3
2 3 5
Sample Output
22 3
Solution
对于一个排列p1,...,pn,其对应的距离为ap1+∑i=1n−1|api−api+1|
考虑ai对答案的影响(假设a序列已经升序)
如果p1=i,考虑p2的取值,其他n−2个数字随便排,如果p2>p1,那么一加一减,ai对答案贡献是0,如果p2<p1,那么两次都是加,对答案贡献是2ai,故这种情况对答案的贡献就是2⋅(i−1)⋅(n−2)!⋅ai
如果pn=i,考虑pn−1的取值,其他n−2个数字随便排,如果pn−1>pn,那么对答案贡献是−ai,如果pn−1<pn,那么对答案贡献是ai,故这种情况对答案的贡献就是((i−1)−(n−i))⋅(n−2)!⋅ai
如果pj=i,2≤j≤n−1,考虑pj−1和pj+1的取值,其他n−3个数字随便排,如果两者比pj一大一小,则对答案贡献是0,如果都比pj大,那么对答案贡献就是−2⋅ai,如果都比pj小,那么对答案贡献就是2⋅ai,故这种情况对答案的贡献就是(n−2)⋅(n−3)!⋅2⋅(A2i−1−A2n−i)⋅ai
故ai对总距离和贡献的次数为(n−2)!⋅(2⋅(i−1)+2⋅i−n−1+2⋅(A2i−1−A2n−i))=(n−1)!⋅(4⋅i−2⋅n−1)
进而求得期望为∑i=1n(4i−2n−1)⋅ain
Code
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #include<queue> #include<map> #include<set> #include<ctime> using namespace std; typedef long long ll; typedef pair<int,int>P; const int INF=0x3f3f3f3f,maxn=100005; ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } int n,a[maxn]; int main() { int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++)scanf("%d",&a[i]); sort(a+1,a+n+1); ll ans=0; for(int i=1;i<=n;i++) ans+=(ll)(4*i-2*n-1)*a[i]; ll g=gcd(ans,n); printf("%I64d %I64d\n",ans/g,n/g); } return 0; }
相关文章推荐
- Codeforces 340C Tourist Problem 数学+DP
- CodeForces 340C Tourist Problem(组合排列,公式推导)
- Codeforces Round #439 (Div. 2) Problem C (Codeforces 869C) - 组合数学
- codeforces 340CTourist Problem(找规律数学题)
- codeforces 340C Tourist Problem(简单数学题)
- codeforces 630G Challenge Pennants(组合数学)
- CodeForces 785D Anton and School - 2 (组合数学)
- CodeForces 123 C.Brackets(组合数学+dp)
- CodeForces 374 B.Inna and Nine(组合数学)
- CodeForces 575 H.Bots(组合数学)
- codeforces 938E MaxHistory 组合数学
- codeforces(559C)--C. Gerald and Giant Chess(组合数学)
- codeforces 869C The Intriguing Obsession 组合数学
- CodeForces 577 B.Modulo Sum(组合数学+dp)
- Codeforces-785D (组合数学)
- CodeForces 579C A Problem about Polyline[数学]
- joj 1172 The Equation Problem 组合数学
- Codeforces 584B Kolya and Tanya 【组合数学】
- Codeforces 51E Pentagon - 组合数学 - 动态规划
- CodeForces 888 D.Almost Identity Permutations(组合数学)