Codeforces Round #164 (Div. 2) E. Playlist【概率,期望】

Manao根据喜好概率重新排列歌单,寻找预期听歌时间的最大值。题目描述了Manao如何根据喜好听歌,计算不同排列下听歌时间的期望,并给出具体例子和解答方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

E. Playlist
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Manao's friends often send him new songs. He never listens to them right away. Instead, he compiles them into a playlist. When he feels that his mind is open to new music, he opens the playlist and starts to listen to the songs.

Of course, there are some songs that Manao doesn't particuarly enjoy. To get more pleasure from the received songs, he invented the following procedure of listening to the playlist:

  • If after listening to some song Manao realizes that he liked it, then he remembers it and starts to listen to the next unlistened song.
  • If after listening to some song Manao realizes that he did not like it, he listens to all the songs he liked up to this point and then begins to listen to the next unlistened song.

For example, if Manao has four songs in the playlist, A, B, C, D (in the corresponding order) and he is going to like songs A and C in the end, then the order of listening is the following:

  1. Manao listens to A, he likes it, he remembers it.
  2. Manao listens to B, he does not like it, so he listens to A, again.
  3. Manao listens to C, he likes the song and he remembers it, too.
  4. Manao listens to D, but does not enjoy it and re-listens to songs A and C.

That is, in the end Manao listens to song A three times, to song C twice and songs B and D once. Note that if Manao once liked a song, he will never dislike it on a subsequent listening.

Manao has received n songs: the i-th of them is li seconds long and Manao may like it with a probability of pi percents. The songs could get on Manao's playlist in any order, so Manao wants to know the maximum expected value of the number of seconds after which the listening process will be over, for all possible permutations of the songs in the playlist.

Input

The first line contains a single integer n (1 ≤ n ≤ 50000). The i-th of the following n lines contains two integers, separated by a single space — liand pi (15 ≤ li ≤ 10000 ≤ pi ≤ 100) — the length of the i-th song in seconds and the probability that Manao will like the song, in percents.

Output

In a single line print a single real number — the maximum expected listening time over all permutations of songs. The answer will be considered valid if the absolute or relative error does not exceed 10 - 9.

Examples
input
3
150 20
150 50
100 50
output
537.500000000
input
4
300 0
300 50
240 50
360 80
output
2121.000000000
Note

Consider the first test case. If Manao listens to the songs in the order in which they were originally compiled, the mathematical expectation will be equal to 467.5 seconds. The maximum expected value is obtained by putting the first song at the end of the playlist.

Consider the second test case. The song which is 360 seconds long should be listened to first. The song 300 seconds long which Manao will dislike for sure should be put in the end.

原题链接:http://www.codeforces.com/problemset/problem/268/E

题意:有一个歌单,有歌曲的时长和喜欢的概率,每一首歌首先都要听一遍,如果不喜欢听这首歌,就去吧之前喜欢听的歌听一遍,然后继续听剩下的歌曲,问你最后听歌时长的期望值。

官方题解:http://www.codeforces.com/blog/entry/6545?locale=en

AC代码:

#include <bits/stdc++.h>
using namespace std;
struct node
{
    double time,rate;
} a[50000+5];
bool cmp(node x,node y)
{
    return x.time*x.rate*(1-y.rate)>y.time*y.rate*(1-x.rate);
}
int main()
{
    int n;
    ios::sync_with_stdio(false);
    while(cin>>n)
    {
        for(int i=0; i<n; i++)
        {
            cin>>a[i].time>>a[i].rate;
            a[i].rate/=100;
        }

        sort(a,a+n,cmp);
        double ans=0,tmp=0;
        for(int i=0; i<n; i++)
        {
            ans+=a[i].time;
            ans+=tmp*(1-a[i].rate);
            tmp+=a[i].time*a[i].rate;
        }
        printf("%.9lf\n",ans);
    }
    return 0;
}


尊重原创,转载请注明出处:http://blog.youkuaiyun.com/hurmishine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值