C. Tourist Problem
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Iahub is a big fan of tourists. He wants to become a tourist himself, so he planned a trip. There are n destinations on a straight road that Iahub wants to visit. Iahub starts the excursion from kilometer 0. The n destinations are described by a non-negative integers sequencea1a2, ..., an. The number ak represents that the kth destination is at distance ak kilometers from the starting point. No two destinations are located in the same place.

Iahub wants to visit each destination only once. Note that, crossing through a destination is not considered visiting, unless Iahub explicitly wants to visit it at that point. Also, after Iahub visits his last destination, he doesn't come back to kilometer 0, as he stops his trip at the last destination.

The distance between destination located at kilometer x and next destination, located at kilometer y, is |x - y| kilometers. We call a "route" an order of visiting the destinations. Iahub can visit destinations in any order he wants, as long as he visits all n destinations and he doesn't visit a destination more than once.

Iahub starts writing out on a paper all possible routes and for each of them, he notes the total distance he would walk. He's interested in the average number of kilometers he would walk by choosing a route. As he got bored of writing out all the routes, he asks you to help him.

Input

The first line contains integer n (2 ≤ n ≤ 105). Next line contains n distinct integers a1a2, ..., an (1 ≤ ai ≤ 107).

Output

Output two integers — the numerator and denominator of a fraction which is equal to the wanted average number. The fraction must be irreducible.

Sample test(s)
input
3
2 3 5
output
22 3
Note

Consider 6 possible routes:

  • [2, 3, 5]: total distance traveled: |2 – 0| + |3 – 2| + |5 – 3| = 5;
  • [2, 5, 3]: |2 – 0| + |5 – 2| + |3 – 5| = 7;
  • [3, 2, 5]: |3 – 0| + |2 – 3| + |5 – 2| = 7;
  • [3, 5, 2]: |3 – 0| + |5 – 3| + |2 – 5| = 8;
  • [5, 2, 3]: |5 – 0| + |2 – 5| + |3 – 2| = 9;
  • [5, 3, 2]: |5 – 0| + |3 – 5| + |2 – 3| = 8.

The average travel distance is  =  = .

思路:

1.分析第一步,有(0->(a1~an))共n中走法,每种走法会出现(n-1)!次。

2.分析其他步,ai->aj,先不考虑i、j两点,还有n-2各点,排列方式为(n-2)!种,n-2各点排列好后,就可以将i、j两点

看做一个整体插入到这个序列的中间(有n-1个位置可以插入),于是ai->aj的走法也会出现(n-1)!次。

所以推得公式为:[(a1+...+an)+∑|ai-aj|]/n,(i!=j) 。

ps:公式推出来只完成了一步,因为数据范围到了10^5。

3.以{a1,a2,a3,a4}为例,计算|ai-aj|实际上就是计算序列{a1,a2,a3,a4}任意两条线段的长度之和。

利用ai->aj覆盖了ai->a(j-1),从左向右观察,则以a2结束的线段只有S2=a1->a2,以a3结束的线段有a1->a3,a2->a3,

其中a1->a3可以看做a1->a2+a2->a3,这里a1->a2已经计算好了,所以S3=S2+2*(a2->a3)。S4同理。

4.若将数组a排好序,先只考虑i<j的情况(i>j的情况的值和i<j的情况值是一样的),就好处理了,就可以得到转移方

程s[i]=s[i-1]+(i-1)*|a[i]-a[i-1]|;s[i]为以i点为结束点的路径总和。

代码:

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <stack>
#include <map>
#include <queue>
#include <vector>
#include <cmath>
#define maxn 100005
using namespace std; typedef long long ll;
ll n,m,ans,u,v,sum;
ll a[maxn],s[maxn]; ll gcd(ll xx,ll yy)
{
ll r=xx%yy;
if(r==0) return yy;
else return gcd(yy,r);
}
void solve()
{
ll i,j,g;
u=0;
s[1]=0;
for(i=2;i<=n;i++)
{
s[i]=s[i-1]+(i-1)*fabs(a[i]*1.0-a[i-1]);
u+=s[i];
}
u=2*u+sum;
v=n;
g=gcd(u,v);
u/=g;
v/=g;
}
int main()
{
ll i,j;
while(~scanf("%I64d",&n))
{
sum=0;
for(i=1;i<=n;i++)
{
scanf("%I64d",&a[i]);
sum+=a[i];
}
sort(a+1,a+n+1);
solve();
printf("%I64d %I64d\n",u,v);
}
return 0;
}

Codeforces Round #198 (Div. 2) C. Tourist Problem (数学+dp)的更多相关文章

  1. Codeforces Round #198 (Div. 2) C. Tourist Problem

    C. Tourist Problem time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  2. Codeforces Round #367 (Div. 2) C. Hard problem(DP)

    Hard problem 题目链接: http://codeforces.com/contest/706/problem/C Description Vasiliy is fond of solvin ...

  3. Codeforces Round #603 (Div. 2) A. Sweet Problem(数学)

    链接: https://codeforces.com/contest/1263/problem/A 题意: You have three piles of candies: red, green an ...

  4. Codeforces Round #367 (Div. 2) C. Hard problem

    题目链接:Codeforces Round #367 (Div. 2) C. Hard problem 题意: 给你一些字符串,字符串可以倒置,如果要倒置,就会消耗vi的能量,问你花最少的能量将这些字 ...

  5. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  6. Codeforces Round #603 (Div. 2) A. Sweet Problem(水.......没做出来)+C题

    Codeforces Round #603 (Div. 2) A. Sweet Problem A. Sweet Problem time limit per test 1 second memory ...

  7. Codeforces Round #198 (Div. 2)

    A.The Wall 题意:两个人粉刷墙壁,甲从粉刷标号为x,2x,3x...的小块乙粉刷标号为y,2y,3y...的小块问在某个区间内被重复粉刷的小块的个数. 分析:求出x和y的最小公倍数,然后做一 ...

  8. Codeforces Round #198 (Div. 2) 340C

    C. Tourist Problem time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  9. Codeforces Round #198 (Div. 2)C,D题解

    接着是C,D的题解 C. Tourist Problem Iahub is a big fan of tourists. He wants to become a tourist himself, s ...

随机推荐

  1. PostgreSQL的备份与还原

    导出: cmd,然后一直cd,到PostgreSQL的bin下面,用其pg_dump程序: pg_dump -h localhost -U ivms864013 ivms864013 > G:\ ...

  2. linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换

    此办法只适合于linux下的php网站放到Windows服务器IIS下 ,  网站除了主页面正常以外  子页面全部出现404错误    这里子页面出现404 错误是说明伪静态没有开启 什么是.htac ...

  3. 怎样学习java?

    嗯.不知不觉中,学习java的时间快要两年了.在学习这两年中.遇到的挫折非常多,收货的知识也非常多.以下我给出我自己在学习过程中使用到的经验.以及相关的资源链接,希望每个爱编程.爱java的人.能够有 ...

  4. Android平均分布的布局图像的下一行

    Android下一行平均分布图片的布局 这是一个非经常见的需求,比方有三个图片button,须要在底部三个平均,比方下个样例: 下面是布局文件 <LinearLayout android:lay ...

  5. 祝贺自己itpub和csdn双双荣获专家博客标题

    这是业界难以得到认同内的技能,记录下来.油...所有的钱,明天会更好.

  6. hdu4493 Tutor

    Tutor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submiss ...

  7. 关于Oralce数据库优化的几点总结

    个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本 ...

  8. iOS_10_tableView的简单使用_红楼十二钗

    终于效果图: 方式1,用字典数组 BeyondViewController.h // // BeyondViewController.h // 10_tableView // // Created b ...

  9. SuSE(SLES)安装配置syslog-ng日志server,可整合splunk

    Update History 2014年04月25日 - 撰写初稿 引言 在自己主动化部署AutoYast.自己主动化监控BMC Patrol双方面形成雏形后.日志的收集.管理.分析也顺势成为我们须要 ...

  10. android水平循环滚动控件

    CycleScrollView.java package com.example.test; import android.content.Context; import android.graphi ...